跳转到内容

使用 Xymon 进行系统监控 / 其他文档 / HOWTO

来自维基教科书,开放世界中的开放书籍

如何将维护记录从一个 Xymon 克隆到另一个 Xymon?

[编辑 | 编辑源代码]

前端 Web GUI 用于收集信息,最终使用“disable”语法发送 bb 命令。

找出主机的维护状态

[编辑 | 编辑源代码]
  • bb xymon-server-name "hobbitdboard color=blue fields=hostname,testname,disabletime,dismsg"

禁用主机

[编辑 | 编辑源代码]
  • bb xymon-server-name "disable hostname.testname $timeframe $REASON"

启用主机

[编辑 | 编辑源代码]
  • bb xymon-server-name "enable hostname.testname"

启用所有处于维护模式的蓝色记录主机

[编辑 | 编辑源代码]

为什么?,当您需要将记录从 hobbit 服务器 A 填充到 B 时很有用。

BB=/usr/bin/bb
HBS=myhobbit.example.com
${BB} ${HBS}  "hobbitdboard color=purple fields=hostname,testname" |
while read L; do
      HOSTANDTEST=`echo $L | sed 's/|/./'`
      ${BB} ${HBS} "enable $HOSTANDTEST"
done

从 Xymon A 复制蓝色记录到 Xymon B

[编辑 | 编辑源代码]
#! /bin/sh
# -----------------------------------------------------------------------------
#           S H E L L  S C R I P T   S P E C I F I C A T I O N
# -----------------------------------------------------------------------------
#
# NAME
#      bluesync.sh  - A shell script to replicate Primary Xymon Serverblue record
#                     to Secondary standby Xymon server.
#
# REVISION HISTORY
#      07/12/2009    Base on getblue.sh and putblue.sh by Ralph Mitchell <ralphmitchell (at) gmail.com>
#                    http://www.hswn.dk/hobbiton/2009/07/msg00214.html
#      10/19/2009    T.J. Yang merge two scripts into one for Xymon  High Availability setup.
#
# USAGE
#      This script is tested on Solaris 10 OS.
#      put this shell script in hobbitlaunch.cfg as section like following.
#
# [bluesync]
# #     DISABLED
#       ENABLE
#       ENVFILE /etc/opt/hobbitserver42/hobbitserver.cfg
#       CMD /opt/hobbitserver42/ext/bluesync/bluesync.sh
#       LOGFILE $BBSERVERLOGS/bluesync.sh.log
#       INTERVAL 5m
#
# DESCRIPTION
#     Xymon keep its blue(maintenance) in memory, not in a file. This script
#     is to copy the blue records from primary Xymon A server into Xymon B secondary one.
#     This script is for use when running Active-Active type of Xymon server
#     High Availability setup. Xymon B is same as Xymon A except
#     the alerting function is disabled. There is another script running on Xymon B to
#     detect the outage of Xymon A and enable Xymon B to become primary one.
#
# Algorithms:
# 1. Pull blue records from Xymon1 and dump them into Xymon2's ext/bluesync directory.
# 2. Process the lifetime fields' value
#     if lifetime is -1 and greater then zero
#       then run "bb hobbit2.test.com "disable hosname.test lifetime message"
#            to keep the blue record.
#     if  liftime =0
#       the run "bb hobbit2.test.com "enable  hostname.*d"  to enable this host blue record
#           since it is expired or was enabled on xymon1 server.
#

# RETURN CODE
#       SUCCESS (=0) - script completed successfully
#       ERROR   (=1) - error... bad things happened
#       WARNING (=2) - warning... something's not quite right, but it's
#                      not serious enough to prevent installation.
#
# set -x

# ---------------------------- CONSTANT DECLARATION ---------------------------
XYMONCFG="/etc/opt/hobbitserver42/hobbitserver.cfg"
BlueTxt="/opt/hobbitserver42/ext/bluesync/hobbit1.test.com.blue.txt"
HB1="hobbit1.test.com"
SED="/usr/bin/sed"
HB2="hobbit2.test.com"
NOW=`/opt/bin/gdate +%s`
EXPR="/usr/bin/expr"
RM="/usr/bin/rm"
SUCCESS=0
ERROR=1
WARNING=2
export SUCCESS ERROR WARNING
# inherit hobbit server variables in configuration file
. ${XYMONCFG}

# ---------------------------- VARIABLE DECLARATION ---------------------------
exit_code=${SUCCESS}

# ******************************** MAIN SCRIPT ********************************

# remove the old file first.
${RM} ${BlueTxt}
${exit_code} = $?

# Getting blue records into a text file.

if [ ${exit_code} -eq ${SUCCESS} ]; then
   $BB ${HB1} "hobbitdboard color=blue fields=hostname,testname,disabletime,dismsg" |
           ${SED} -e 's/\\/\\\\/g'  > ${BlueTxt}
${exit_code} = $?
fi

if [ ${exit_code} -eq ${SUCCESS} ]; then
    cat ${BlueTxt} | while read line
    do
      OFS="$IFS"
      IFS="|"
      set $line
      IFS="$OFS"
      if [ "$3" -eq "-1" ]; then
        # found "disable until OK"
        lifetime="-1"
      else
        lifetime=`$EXPR $3 - ${NOW}`
        if [ "$lifetime" -le "0" ]; then
          # this one expired, enable it
          $BB ${HB2} "enable $1.*"
        else
          lifetime="$lifetime"s
        fi
      fi
      msg=`echo "$4" | $SED -e 's/\\\n/\n/g'`
      $BB ${HB2} "disable $1.$2 $lifetime $msg"
    done
${exit_code} = $?
fi

exit ${exit_code}

如何让 pca 与 xymon 协同工作?

[编辑 | 编辑源代码]

pca 是一个 Perl 脚本,可以报告和安装来自 Sun 补丁数据库的 Solaris OS 所有版本的缺失补丁。

有两种方法可以将 pca 与 xymon 监控工具集成。

服务器端补丁分析

[编辑 | 编辑源代码]

在 Xymon 客户端上运行“showrev -p”和“pkginfo -x”,并在 Xymon 服务器上运行 pca.pl 来分析所有客户端的缺失补丁。

客户端补丁分析

[编辑 | 编辑源代码]

在 xymon 客户端运行 pca.pl 进行缺失补丁分析,并将缺失补丁列表发送到 xymon 服务器。

  • pca 软件及其依赖软件需要作为 xymon 客户端软件包的一部分部署。
  • 需要配置 pca.pl 查询 xymon 服务器上驻留的内部 Solaris 补丁数据库。
  • 需要设置一个本地 pca 代理服务器来存储所有补丁压缩文件和主要的 Solaris 补丁数据库。
  • 在获得批准更新缺失补丁后,使用 pca 命令更新缺失补丁。

服务器端和客户端方法的优缺点

[编辑 | 编辑源代码]
集成方法 服务器端分析 客户端分析
客户端需要更改 修改 -sunos.sh 以发送 "showrev -p" 和 "pkginfo -x" 输出。 在 Xymon 客户端上运行 "pca -L" 以及包装脚本中的更多 HTML 代码修正,或作为客户端端扩展模块运行 "pca -M"(对 pca.pl 进行补丁更改)。
服务器端需要更改 编写一个服务器端模块来处理从客户端发送的 "showrev -p" 数据。 Xymon 服务器将创建一个包含从 Xymon 客户端发送的缺失补丁的 "pca" 列。
Xymon 服务器上的负载 这将为 Xymon 服务器上的所有客户端添加缺失补丁计算时间。 Xymon 服务器的负载最小,因为计算任务是在 Xymon 客户端上完成的。
pca 脚本更改 不需要更改 pca.pl 脚本。我们只需要在 Xymon 服务器上更新一次新的 pca.pl。 "pca -L" 不会生成与 Xymon 客户端兼容的 HTML 代码。我们需要在包装脚本中修正它,或者修补 pca perl 代码。
客户端到服务器的流量 "showrev -p" 的原始数据输出将每 5 分钟发送一次! 消息大小仅包含缺失补丁列表,而不是 "showrev -p" 的全部输出,并且每 5 分钟发送一次。
管理成本 待定 待定

使用 Apache 和 CentOS 5 对 Active Directory 2003 进行透明身份验证

[编辑 | 编辑源代码]

在这里,我(Stewart L)将解释我在将 Linux 服务器加入到 Active Directory 2003 基础设施并对域进行用户身份验证(无需用户输入凭据)时所采取的步骤。

这针对的是 AD 2003 结构。如果你是在 200 或 NT 域中操作,这可能不适合你,但它应该能为你指明方向。

在这一点上,我将对示例做一些假设。

  • 你正在设置一个名为 web1.example.com 的 Web 服务器。
  • 你的域名为 EXAMPLE,Kerberos 领域名为 EXAMPLE.COM
  • 你有一个名为 EXAMPLE\Bob 的域帐户,它被授权将机器添加到域中。
  • 你的域控制器是 dc1.example.com。

安装软件包

[编辑 | 编辑源代码]

你显然需要安装 Apache。你还需要 mod_auth_kerb 软件包来对域进行身份验证。如果你使用 authconfig-gtk 软件包中的 system-config-authentication 工具,会容易得多。

yum -y install mod_auth_kerb authconfig-gtk

将机器加入域

[编辑 | 编辑源代码]

在将机器加入域之前,必须处理一些事项...

  • 主机名(不含域)应不超过 15 个字符。
  • 系统时钟应该同步。为此,请使用 NTP。
  • 你的 /etc/hosts 文件需要正确设置。你应该有一个指向 127.0.0.1 的 localhost 条目,以及一个指向分配的 IP 地址的完全限定主机名条目。

处理完这些问题后,我们就可以开始配置身份验证了。

  1. 以 root 用户身份运行 system-config-authentication。
  2. 在身份验证选项卡上,启用 Kerberos 和 Winbind。
  3. 配置 Kerberos。
    1. REALM = EXAMPLE.COM
    2. 选中使用 DNS 将主机解析为领域并定位 KDC 的复选框。
    3. KDC 和管理服务器可以留空。
    4. 单击确定。
  4. 配置 Winbind
    1. Domain = EXAMPLE
    2. Security Model = ads
    3. ADS Realm = EXAMPLE.COM
    4. Domain Controllers = dc1.example.com
    5. 单击确定
  5. 编辑你的 /etc/samba/smb.conf 文件,并确保你的 netbios 名称与你的主机名相同。这应该仅包含主机部分,不含域。

加入域

[编辑 | 编辑源代码]

作为 root 用户,运行以下命令。你将需要在两个命令后都输入 Bob 的密码。

kinit EXAMPLE\Bob
net ads join -U EXAMPLE\Bob

这是域。默认情况下,你必须在该机器上有一个本地帐户来对 AD 进行身份验证,这意味着如果 web1.example.com 上没有 bob 帐户,bob 就无法使用他的域密码登录。

配置 AD 用户

[编辑 | 编辑源代码]

这是事情变得有些复杂的地方。我们将在 AD 中创建一个用户帐户,Web 服务器将使用该帐户进行身份验证。Windows Server 2000 和 2003 有许多不同的版本和 Service Pack。如果你在这一部分遇到问题,请查看 http://grolmsnet.de/kerbtut/

  • 在 AD 中创建一个名为 http_web1 的用户。
  • 设置该帐户,使其密码永不过期。
  • 在域控制器的命令行中,运行以下命令
ktpass -princ HTTP/[email protected] -mapuser EXAMPLE\http_web1 -crypto DES-CBC-MD5 -ptype KRB5_NT_SRV_HST -pass * -out c:\temp\http_web1.heytab
  • 这将在 C:\temp 中创建一个 keytab 文件,你需要将其移动到 Web 服务器并放置在 /etc/http 中。

配置 Apache

[编辑 | 编辑源代码]

你的配置应该类似于以下内容...

<Location />
   AuthName "Welcome to EXAMPLE"
   AuthType Kerberos
   Krb5Keytab /etc/httpd/http_web1.keytab
   KrbAuthRealm EXAMPLE.COM
   KrbMethodNegotiate On
   KrbSaveCredentials off
   KrbVerifyKDC off
   Require valid-user
   </Location>

可以将 Authname 更改为新名称。有关特定配置的更多信息,请查看 http://modauthkerb.sourceforge.net/

配置 Firefox(可选)

[编辑 | 编辑源代码]
  1. 在 URL 栏中键入 about:config
  2. 修改以下 "首选项名称"
    • network.negotiate-auth.delegation-uris - Example.com
    • network.negotiate-auth.trusted-uris - Example.com
    • network.automatic-ntlm-auth.trusted-uris - Example.com

如何阻止 Xymon 服务器发出红色/紫色警报风暴?

[编辑 | 编辑源代码]
  • 红色警报风暴
    • 由少数交换机的故障和错误的 bb-hosts 配置(缺少路由器依赖项指令)引起。
    • 配置 fping 访问控制列表时的人为错误。
  • 紫色风暴
    • 由 Xymon 服务器自身进入非常高的 CPU 负载而导致,这阻止了它正确运行 Xymon 守护进程,因此所有机器都因 30 分钟内未更新消息而变为紫色。

如何修复

[编辑 | 编辑源代码]
  • 部署邮件过滤器以限制 Xymon 服务器可以发送的警报数量。

如何从 Xymon 服务器更新 Xymon 客户端的配置文件?

[编辑 | 编辑源代码]

为什么?

[编辑 | 编辑源代码]
  • 为了对所有 Hobbit 客户端进行全局变量更改。
    • 例如:将所有客户端配置为从一个到两个 Xymon 服务器发送 Hobbit 消息。这将需要修改所有客户端的 hobbitclient.cfg。如果你只有一小部分客户端,手动登录到每个机器进行编辑是可以的。但对于一个有 3000 个客户端的池来说,这种更改最好通过 clientudpate 或集群 shell 加上 rsh 的方法来完成。
    • 此维基页面是为了验证 Xymon 的 clientupdate 是否真的能满足这种需求。

需要做些什么?

[编辑 | 编辑源代码]
  • 使用位于中央 Hobbit 服务器上的新 hobbit-client.cfg 更新 Hobbit 客户端上的 hobbit-client.cfg。新的 hobbit-client.cfg 包含将 Hobbit 消息发送到两个 Hobbit 服务器的新配置。
    • 旧版和新版 hobbit-client.cfg 文件的差异。
bash-2.05$ diff hobbitclient.cfg hobbitclient.cfg.new
3,4c3,4
< BBDISP="hobbit.test.com"         # IP address of the Hobbit server
< BBDISPLAYS=""                   # IP of multiple Hobbit servers. BBDISP must be "0.0.0.0".
---
> BBDISP="0.0.0.0"      # IP address of the Hobbit server
> BBDISPLAYS="hobbit.test.com hobbit2.test.com"  # IP of multiple Hobbit servers. BBDISP must be "0.0.0.0".
bash-2.05$
  • 确保/修改 ext 目录中的所有脚本,将消息发送到 BBDISPLAYS。
    • 温度模块。
      • 原始的
## Report the data to the $BBDISP host
if [ "$TEMPDEBUG" = 1 ]; then
        echo "$DATA"                            # Send it to stdout
else
        $BB $BBDISP "$LINE"                     # SEND IT TO BBDISPLAY
fi
      • 针对两个 Hobbit 服务器的更改。
## Report the data to the $BBDISP host
if [ "$TEMPDEBUG" = 1 ]; then
        echo "$DATA"                            # Send it to stdout
else
    if [ "$BBDISP" = "0.0.0.0" ];then
        for i in "$BBDISPLAYS"
        do
        $BB $i "$LINE"                     # SEND IT TO BBDISPLAYS
        done
    else
        $BB $BBDISP "$LINE"                     # SEND IT TO BBDISPLAY
fi

先阅读手册

[编辑 | 编辑源代码]

为了管理更新客户端而不必登录到每个服务器,你可以使用 clientupdate 实用程序。这是你如何设置新客户端版本的发布。

  1. 确保 Xymon 客户端外部脚本将消息发送到 "BBDISPLAYS",而不仅仅是 "BBDISP" 变量。
    1. 这需要检查部署的外部(自制)脚本,以便修改为将消息发送到两个 Xymon 服务器。
  2. 创建新客户端:设置新的客户端 $BBHOME 目录,例如,通过将现有客户端安装复制到空目录并根据你的需要进行修改。最好删除 tmp/ 和 logs/ 目录中的所有文件,因为没有必要将这些文件复制到所有客户端。注意 etc./ 文件,确保它们适合你想部署此新客户端的系统。你可以添加文件 - 例如,ext/ 目录中的扩展脚本 - 但 clientupdate 实用程序不能删除或重命名文件。
  3. 打包客户端:当你的新客户端软件准备就绪时,创建一个新客户端的 tar 文件。tar 存档中的所有文件必须具有相对于客户端的 $BBHOME 的文件名(通常,~hobbit/client/)。将 tar 文件保存在 Hobbit 服务器上的 ~hobbit/server/download/somefile.tar 中。不要压缩它。建议你为文件名使用某种操作系统和版本号方案,但你可以选择任何适合你的文件名 - 唯一的要求是它必须以 ".tar" 结尾。文件名中 ".tar" 之前的部分是 Hobbit 将用作 "clientversion" ID 的部分。
  4. 配置哪些主机接收新客户端:在 client-local.cfg(5) 文件中,你现在必须设置一个 clientversion:ID 行,其中 ID 与你用于 tar 文件的文件名匹配。因此,如果你已将新客户端打包到文件 linux.v2.tar 中,那么 client-local.cfg 中相应的条目将是 clientversion:linux.v2。
  5. 等待 hobbitd 重新加载 client-local.cfg:hobbitd 最多在 10 分钟后会自动重新加载 client-local.cfg 文件。如果你想强制立即重新加载,请向 hobbitd 进程发送 SIGHUP 信号。
  6. 等待客户端更新:下次客户端联系 Hobbit 服务器发送客户端数据时,它将注意到 client-local.cfg 中的新的 clientversion 设置,并将运行 clientupdate 来安装新的客户端软件。因此,当客户端下次运行时,它将使用新的客户端软件。

开始使用 clientupdate

[编辑 | 编辑源代码]
  • 找出 hobbiclient 版本,我们从 "clientupdate --level" 的输出中运行 4.2.0。
 bash-3.00$ ./bbcmd
 2009-01-28 20:50:39 Using default environment file /etc/opt/hobbitclient42/hobbitclient.cfg
 bash-3.00$ ./clientupdate --level
 4.2.0
 bash-3.00$
 
    • 或者从 clientversion.cfg 中剪切版本。
bash-3.00$ cat  clientversion.cfg
4.2.0
bash-3.00$
  • 执行更新,但服务器端没有新版本。
bash-3.00$ ./clientupdate
2009-01-28 20:53:25 No new version string!
bash-3.00$

clientupdate 的错误消息

[编辑 | 编辑源代码]
  • 核心转储,因为我们没有先运行 bbcmd。clientupdate.c 需要更新以避免核心转储。
bash-3.00$ ./clientupdate
2009-01-28 20:49:13 xgetenv: Cannot find value for variable ETCBBHOME
Segmentation Fault (core dumped)
bash-3.00$

  • "--suid-setup failed: No such file or directory",服务器端没有任何配置。
bash-2.05$ ./clientupdate --update=4.2.1
tar: blocksize = 0
2009-01-28 16:03:39 exec() of clientupdate --suid-setup failed: No such file or directory
bash-2.05$

如何配置 sudo 以使 Hobbit 客户端获得有限的 root 权限?

[编辑 | 编辑源代码]

将 SUDO 路径添加到 Hobbit 客户端主脚本

[编辑 | 编辑源代码]

我们需要修改 hobbitclient.sh$.{OS} 以使用 sudo,在 root 权限访问时无需提示密码。以下是 Linux 客户端的补丁。你需要对其他操作系统类型进行类似的修补。

[root:myhbserver] cat  src/hobbitclient.sh.linux.patch
--- client/hobbitclient.sh.orig 2008-04-12 08:41:20.050938000 -0500
+++ client/hobbitclient.sh      2008-04-12 08:41:26.224999984 -0500
@@ -18,7 +18,16 @@
 LANG=C
 LC_ALL=C
 LC_MESSAGES=C
-export LANG LC_ALL LC_MESSAGES
+# Why : Make hobbit client to be non-intrusive and avoid chmod system file
+# What: use sudo to fetch /var/log/messages on linux in 600 file mode
+# # Rules for HOBBIT client
+# logfech will failed on Linux because /var/log/messages is default to 600
+# User_Alias HOBBITCLIENT = hobbitc
+# Cmnd_Alias HOBBITCLIENTCMDS = /usr/sbin/swapinfo,/usr/sbin/vxdisk,/usr/bin/ipmitool,/opt/bin/logfetch
+# HOBBITCLIENT ALL = NOPASSWD: HOBBITCLIENTCMDS
+
+SUDO=/opt/bin/sudo
+export LANG LC_ALL LC_MESSAGES SUDO

 LOCALMODE="no"
 if test $# -ge 1; then
@@ -53,7 +62,7 @@
 # logfiles
 if test -f $LOGFETCHCFG
 then
-    $HOBBITCLIENTHOME/bin/logfetch $LOGFETCHCFG $LOGFETCHSTATUS >>$MSGTMPFILE
+    ${SUDO} $HOBBITCLIENTHOME/bin/logfetch $LOGFETCHCFG $LOGFETCHSTATUS >>$MSGTMPFILE
 fi
 # Client version
 echo "[clientversion]"  >>$MSGTMPFILE
[root:myhbserver]

配置你的 sudoer 文件

[编辑 | 编辑源代码]

hobbits = Hobbit 服务器用户帐户。hobbitc = Hobbit 客户端帐户。

[root:myhbserver] cat /opt/sudo16/etc/sudoers  |grep -v ^$ |grep -v ^#
root    ALL=(ALL) ALL
User_Alias HOBBITUSER = hobbits
Cmnd_Alias HOBBITSVERTCMDS = /opt/fping24/sbin/fping
HOBBITUSER ALL = NOPASSWD: HOBBITSVERTCMDS
User_Alias HOBBITUSER = hobbitc
Cmnd_Alias HOBBITCLIENTCMDS = /usr/sbin/swapinfo,/usr/sbin/vxdisk
HOBBITUSER ALL = NOPASSWD: HOBBITCLIENTCMDS
[root:myhbserver]

确定主机是否未配置为发出警报

[编辑 | 编辑源代码]

no-alerts.pl 列表

[编辑 | 编辑源代码]
#! /usr/bin//perl
##########################################################################################
#
# no-alerts.pl - This script uses bbhostgrep to get a list of sevrers, then fetches their
#       info test. It then parses this looking for 'No Alerts Defined' It then outputs the
#       hostname of the machines that are missing alert config.
#
#  Created by Stewart Larsen
#  06/02/2008: minor editing T.J. Yang
##########################################################################################

use strict;
use LWP::Simple;

# Set debug to 1 to see the hosts and URL as you loop through.
my $debug = 0;

#Token in bb-hosts to indicate we need to run firewall tests on this device my $test_name = '*';
##########################################################################################
# Constant:
##########################################################################################
my $CUT  = "/bin/cut";
my $SORT = "/bin/sort";
my $UNIQ = "/usr/bin/uniq";
#ip/domain : server to poll for information
my $BBDISP = "hobbit.test.com";
# hobbit server  install directory
my $HOBBITHOME ="/opt/hobbitserver42";
my $BBHOSTGREP = "$HOBBITHOME/bin/bbhostgrep";

##########################################################################################
# Variables:
##########################################################################################

# Paths - Fetch all hosts and trim for just the host name.
# Then sort and unique the list

my $HOSTGREPOUT="$BBHOSTGREP '*'| $CUT -d' ' -f2 | $SORT  | $UNIQ ";

##########################################################################################
# Main Program:
##########################################################################################

open (INPUT, "-|",$HOSTGREPOUT ) or die "Cannot open input: $!\n";
while(<INPUT>)
{
        chomp (my $host = $_);
        my $fetch_URL = 'http://'.$BBDISP.'/hobbit-cgi/bb-hostsvc.sh?HOST='.$host.'&SERVICE=info';
        print "$host: $fetch_URL\n" if $debug;

        my $content = get $fetch_URL;
        if (!defined $content)
        {
                warn "Couldn't get $fetch_URL";
                next;
        }

        if($content =~ m/No Alerts Defined/i)
        {
                print "$host has no alerts defined\n";
        }
}
close INPUT;

如何监控和绘制 Flexlm 许可证使用情况图表?

[编辑 | 编辑源代码]

服务器端的 rrd 配置文件

[编辑 | 编辑源代码]
[flexlm]
TITLE License counts 
YAXIS #

DEF:matlab=flexlm.rrd:MATLAB:AVERAGE
LINE2:matlab#FF0000:Matlab
COMMENT:\n
GPRINT:matlab:LAST:Matlab \: %5.1lf%s (cur)
GPRINT:matlab:MAX: \: %5.1lf%s (max)
GPRINT:matlab:MIN: \: %5.1lf%s (min)
GPRINT:matlab:AVERAGE: \: %5.1lf%s (avg)\n

DEF:simulink=flexlm.rrd:SIMULINK:AVERAGE
LINE2:simulink#CC3333:Simulink
COMMENT:\n
GPRINT:simulink:LAST:Simulink \: %5.1lf%s (cur)
GPRINT:simulink:MAX: \: %5.1lf%s (max)
GPRINT:simulink:MIN: \: %5.1lf%s (min)
GPRINT:simulink:AVERAGE: \: %5.1lf%s (avg)\n

DEF:commtlb=flexlm.rrd:CommunicationToolb:AVERAGE
LINE2:commtlb#66CC66:Communication Toolb
COMMENT:\n
GPRINT:commtlb:LAST:Communication Toolb \: %5.1lf%s (cur)
GPRINT:commtlb:MAX: \: %5.1lf%s (max)
GPRINT:commtlb:MIN: \: %5.1lf%s (min)
GPRINT:commtlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:ctrltlb=flexlm.rrd:ControlToolbox:AVERAGE
LINE2:ctrltlb#6666CC:Control Toolbox
COMMENT:\n
GPRINT:ctrltlb:LAST:Control Toolbox \: %5.1lf%s (cur)
GPRINT:ctrltlb:MAX: \: %5.1lf%s (max)
GPRINT:ctrltlb:MIN: \: %5.1lf%s (min)
GPRINT:ctrltlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:fintlb=flexlm.rrd:FinancialToolbox:AVERAGE
LINE2:fintlb#00FF00:Financial Toolbox
COMMENT:\n
GPRINT:fintlb:LAST:Financial Toolbox \: %5.1lf%s (cur)
GPRINT:fintlb:MAX: \: %5.1lf%s (max)
GPRINT:fintlb:MIN: \: %5.1lf%s (min)
GPRINT:fintlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:fztlb=flexlm.rrd:FuzzyToolbox:AVERAGE
LINE2:fztlb#66FF66:Fuzzy Toolbox
COMMENT:\n
GPRINT:fztlb:LAST:Fuzzy Toolbox \: %5.1lf%s (cur)
GPRINT:fztlb:MAX: \: %5.1lf%s (max)
GPRINT:fztlb:MIN: \: %5.1lf%s (min)
GPRINT:fztlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:imgtlb=flexlm.rrd:ImageToolbox:AVERAGE
LINE2:imgtlb#0000FF:Image Toolbox
COMMENT:\n
GPRINT:imgtlb:LAST:Image Toolbox \: %5.1lf%s (cur)
GPRINT:imgtlb:MAX: \: %5.1lf%s (max)
GPRINT:imgtlb:MIN: \: %5.1lf%s (min)
GPRINT:imgtlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:compiler=flexlm.rrd:Compiler:AVERAGE
LINE2:compiler#6666FF:Compiler
COMMENT:\n
GPRINT:compiler:LAST:Compiler \: %5.1lf%s (cur)
GPRINT:compiler:MAX: \: %5.1lf%s (max)
GPRINT:compiler:MIN: \: %5.1lf%s (min)
GPRINT:compiler:AVERAGE: \: %5.1lf%s (avg)\n

DEF:neuralnettlb=flexlm.rrd:NeuralNetworkTool:AVERAGE
LINE2:neuralnettlb#FFFF00:Neural Network Tool
COMMENT:\n
GPRINT:neuralnettlb:LAST:Neural Network Tool \: %5.1lf%s (cur)
GPRINT:neuralnettlb:MAX: \: %5.1lf%s (max)
GPRINT:neuralnettlb:MIN: \: %5.1lf%s (min)
GPRINT:neuralnettlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:opttlb=flexlm.rrd:OptimizationToolbo:AVERAGE
LINE2:opttlb#00FFFF:Optimization Toolbo
COMMENT:\n
GPRINT:opttlb:LAST:Optimization Toolbo \: %5.1lf%s (cur)
GPRINT:opttlb:MAX: \: %5.1lf%s (max)
GPRINT:opttlb:MIN: \: %5.1lf%s (min)
GPRINT:opttlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:distributedtlb=flexlm.rrd:DistribComputingT:AVERAGE
LINE2:distributedtlb#CC66CC:Distrib Computing T
COMMENT:\n
GPRINT:distributedtlb:LAST:Distrib Computing T \: %5.1lf%s (cur)
GPRINT:distributedtlb:MAX: \: %5.1lf%s (max)
GPRINT:distributedtlb:MIN: \: %5.1lf%s (min)
GPRINT:distributedtlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:pdetlb=flexlm.rrd:PDEToolbox:AVERAGE
LINE2:pdetlb#CCCC66:PDE Toolbox
COMMENT:\n
GPRINT:pdetlb:LAST:PDE Toolbox \: %5.1lf%s (cur)
GPRINT:pdetlb:MAX: \: %5.1lf%s (max)
GPRINT:pdetlb:MIN: \: %5.1lf%s (min)
GPRINT:pdetlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:signaltlb=flexlm.rrd:SignalToolbox:AVERAGE
LINE2:signaltlb#66CCCC:Signal Toolbox
COMMENT:\n
GPRINT:signaltlb:LAST:Signal Toolbox \: %5.1lf%s (cur)
GPRINT:signaltlb:MAX: \: %5.1lf%s (max)
GPRINT:signaltlb:MIN: \: %5.1lf%s (min)
GPRINT:signaltlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:simulctrl=flexlm.rrd:SimulinkControlDe:AVERAGE
LINE2:simulctrl#CCCC00:Simulink Control
COMMENT:\n
GPRINT:simulctrl:LAST:Simulink Control \: %5.1lf%s (cur)
GPRINT:simulctrl:MAX: \: %5.1lf%s (max)
GPRINT:simulctrl:MIN: \: %5.1lf%s (min)
GPRINT:simulctrl:AVERAGE: \: %5.1lf%s (avg)\n

DEF:stattlb=flexlm.rrd:StatisticsToolbox:AVERAGE
LINE2:stattlb#999966:Statistics Toolbox
COMMENT:\n
GPRINT:stattlb:LAST:Statistics Toolbox \: %5.1lf%s (cur)
GPRINT:stattlb:MAX: \: %5.1lf%s (max)
GPRINT:stattlb:MIN: \: %5.1lf%s (min)
GPRINT:stattlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:symboltlb=flexlm.rrd:SymbolicToolbox:AVERAGE
LINE2:symboltlb#FFCC00:Symbolic Toolbox
COMMENT:\n
GPRINT:symboltlb:LAST:Symbolic Toolbox \: %5.1lf%s (cur)
GPRINT:symboltlb:MAX: \: %5.1lf%s (max)
GPRINT:symboltlb:MIN: \: %5.1lf%s (min)
GPRINT:symboltlb:AVERAGE: \: %5.1lf%s (avg)\n

DEF:idtlb=flexlm.rrd:IdentificationTool:AVERAGE
LINE2:idtlb#FF00FF:Identification Tool
COMMENT:\n
GPRINT:idtlb:LAST:Identification Tool \: %5.1lf%s (cur)
GPRINT:idtlb:MAX: \: %5.1lf%s (max)
GPRINT:idtlb:MIN: \: %5.1lf%s (min)
GPRINT:idtlb:AVERAGE: \: %5.1lf%s (avg)\n

如何创建 Hobbit 客户端自定义测试脚本?

[编辑 | 编辑源代码]

任何可以通过脚本或自定义程序自动执行的操作都可以添加到 Hobbit 中。www.deadcat.net 存档中提供了许多针对 Big Brother 的扩展脚本,如果你在 Hobbit 中运行这些脚本,它们通常无需修改即可使用。有时需要一些小的调整 - 如果你不知道如何操作,可以向 Hobbit 邮件列表寻求帮助。

但是,如果你需要测试一些独特的东西,编写扩展脚本非常简单。你需要弄清楚一些事情

  • 你将使用什么名称作为列名?
  • 你将如何测试它?
  • 什么标准应该决定测试是红色、黄色还是绿色?
  • 您将在状态消息中包含来自测试的哪些额外数据?

一个简单的客户端扩展脚本如下所示

#!/bin/sh
 
COLUMN=mytest	# Name of the column
COLOR=green		# By default, everything is OK
MSG="Bad stuff status"

# Do whatever needed to test for something
# As an example, go red if /tmp/badstuff exists.
if test -f /tmp/badstuff
then
   COLOR=red
   MSG="${MSG}

   `cat /tmp/badstuff`
   "
else
   MSG="${MSG}

   All is OK
   "
fi

# Tell Hobbit about it
$BB $BBDISP "status $MACHINE.$COLUMN $COLOR `date` ${MSG}"

exit 0

您会注意到一些环境变量是预定义的:BB、BBDISP、MACHINE 都是当您通过 hobbitlaunch 运行脚本时由 Hobbit 提供的。还要注意 MSG 变量是如何用于构建状态消息的 - 它最初只包含“糟糕的事情状态”,然后当我们确定状态时,您会在消息中添加数据。

要运行它,将您的脚本保存在 ~hobbit/client/ext/ 目录中(即,您安装 Hobbit 客户端的 ext/ 目录中),然后在 ~hobbit/client/etc/clientlaunch.cfg(或服务器上的 ~hobbit/server/etc/hobbitlaunch.cfg)文件中添加一个新部分,如下所示

[myscript]
   ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
   CMD $HOBBITCLIENTHOME/ext/myscript.sh
   LOGFILE $HOBBITCLIENTHOME/logs/myscript.log
   INTERVAL 5m

您可能希望为自定义脚本创建的新列添加描述。在 hobbit *服务器* 上,编辑文件 $BBHOME/columndoc.csv,添加一行,例如

myscript;The <b>myscript</b> column shows the status of my custom script.;

如何编写服务器端模块?

[编辑 | 编辑源代码]

服务器端脚本看起来与客户端脚本几乎相同,但它们通常会使用 bbhostgrep 实用程序来挑选出在 bb-hosts 文件中定义了特殊标签的主机,然后为每个主机发送一条状态消息。像这样

#!/bin/sh

BBHTAG=foo           # What we put in bb-hosts to trigger this test
COLUMN=$BBHTAG	# Name of the column, often same as tag in bb-hosts

$BBHOME/bin/bbhostgrep $BBHTAG | while read L
do
   set $L	# To get one line of output from bbhostgrep

   HOSTIP="$1"
   MACHINEDOTS="$2"
   MACHINE='echo $2 | $SED -e's/\./,/g'`

   COLOR=green
   MSG="$BBHTAG status for host $MACHINEDOTS"

   #... do the test, perhaps modify COLOR and MSG

   $BB $BBDISP "status $MACHINE.$COLUMN $COLOR `date`

   ${MSG}
   "
done
 
exit 0

请注意,对于服务器端测试,您需要遍历在 bb-hosts 文件中找到的主机列表,并为每个主机发送一条状态消息。除此之外,它就像客户端测试一样。

此脚本保存在 ~/hobbit/server/ext/my_script.sh 中,您可以在 ~hobbit/server/etc/hobbitlaunch.cfg 中添加其描述

[foo]
   ENVFILE $BBTHOME/etc/hobbitserver.cfg
   CMD $BB/ext/my_script.sh
   LOGFILE $BB/logs/myscript.log
   INTERVAL 5m

现在可以将服务添加到 bb-hosts 文件中

127.0.0.1 my_server # foo

如何在将自定义脚本添加到正在运行的代理之前测试它?

[编辑 | 编辑源代码]

在激活新的自定义脚本之前,检查其功能和在 stdout 上的输出很有用。

要在命令行上运行脚本,您必须加载所有 xymon 环境并将 $BB 命令替换为“echo”。

您可以通过插入此代码片段并在命令行上运行它来轻松地动态执行此操作,然后测试您的脚本

TEST=1 ./my_script.sh

如果您想在测试后将其添加到 hobbitlaunch.cfg,则无需在脚本中进行任何更改。

#!/bin/sh
...
# Test-Mode ?
# TEST=0 => works in cooperation with Xymon agent (default)
# TEST=1 => for testing, results to stdout (run "TEST=1 ./bb-testname.sh" on cmd-line)
# TEST>1 => for testing, but sending results to Xymon server without activating script in hobbitlaunch.cfg
TEST=${TEST:-"0"}
if [ "$TEST" -gt "0" ]
then
  BBHOME="$HOME/xymon/server"
  . $BBHOME/etc/hobbitserver.cfg
  BBQUERYCMD=$BB
  [ "$TEST" = "1" ] && BB="echo"
fi
...

这对客户端脚本和服务器端脚本都有效。

当然,您必须更改环境的路径设置。

Hobbit 客户端和 ZFS 监控

[编辑 | 编辑源代码]
  • 有关简单的 ZFS 池示例,请参阅 ZFS 教程
  • 在此示例中,我们有第 3 和第 4 个磁盘可用于 zfs。第 1 和第 2 个已在 SVM 下。
bash-3.00# metastat |tail -3
Device   Reloc  Device ID
c0t1d0   Yes    id1,sd@SSEAGATE_ST336607LSUN36G_3JA6ECDF00007418PJ5V
c0t0d0   Yes    id1,sd@SSEAGATE_ST336607LSUN36G_3JA6EGFK00007418A7PM
bash-3.00#

bash-3.00# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c0t0d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>
          /pci@1c,600000/scsi@2/sd@0,0
       1. c0t1d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>
          /pci@1c,600000/scsi@2/sd@1,0
       2. c0t2d0 <HITACHI-DK32EJ36NSUN36G-PQ0B-33.92GB>
          /pci@1c,600000/scsi@2/sd@2,0
       3. c0t3d0 <HITACHI-DK32EJ36NSUN36G-PQ0B-33.92GB>
          /pci@1c,600000/scsi@2/sd@3,0
Specify disk (enter its number):
bash-3.00# zpool create -f mypool mirror c0t2d0 c0t3d0
bash-3.00# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
mypool                 33.8G   84.5K   33.7G     0%  ONLINE     -
bash-3.00#
#!/bin/ksh
# Revision History: 
# 1. Mike Rowell <[email protected]>, original
# 2. Uwe Kirbach <[email protected]>
# 3. T.J. Yang: add in some comments.

DISKYELL=80
DISKRED=90
TEST="zfs"
DISPCOLOR="green"
FIRST_LINE="zfs - okay"
FIRST_LINE_HEALTH="okay"
FIRST_LINE_CAP="okay"

#What: beautify the page display by html code.
STRING="<table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr>"
#What: a loop to parse output of "zpool list -H" output.
# bash-3.00# zpool list
# NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
# mypool                 33.8G   84.5K   33.7G     0%  ONLINE     -
# bash-3.00# zpool list -H
# mypool  33.8G   84.5K   33.7G   0%      ONLINE  -
# bash-3.00#

/usr/sbin/zpool list -H | while read name size used avail cap health altroot
do
  LINE_COLOR="green"

  if [ "${health}" == "ONLINE" ]; then
    HEALTH_COLOR="green"
  elif [ "${health}" == "DEGRADED" ]; then
    HEALTH_COLOR="yellow"
  elif [ "${health}" == "FAULTED" ]; then
    HEALTH_COLOR="red"
  fi

  cap=`echo ${cap} | cut -d% -f1` 
  if [ ${cap} -lt $DISKYELL ]; then
    CAP_COLOR="green" 
  elif [ ${cap} -gt $DISKYELL ]; then 
    CAP_COLOR="yellow"
  elif [ ${cap} -gt $DISKRED ]; then
    CAP_COLOR="red"
  fi

  if [ "$HEALTH_COLOR" == "red" -o "$HEALTH_COLOR" == "yellow" -o "$CAP_COLOR" == "red" -o "$CAP_COLOR" == "yellow" ]; then
    DISPCOLOR=$COLOR
    LINE_COLOR=$COLOR
  fi

  case $HEALTH_COLOR in
    red)    FIRST_LINE_HEALTH="faulted" ;;
    yellow) FIRST_LINE_HEALTH="degraded" ;;
  esac

  case $CAP_COLOR in
    red)    FIRST_LINE_CAP="full" ;;
    yellow) FIRST_LINE_CAP="nearly full" ;;
  esac

  STRING="$STRING <tr><td>&${LINE_COLOR}</td><td>${name}</td><td>${health}</td><td>${cap}</td></tr>"
done

# What: accumulate the bb message strings.
STRING="$STRING </table><br><br>"
STRING="$STRING`/usr/sbin/zpool status -xv`"
FIRST_LINE="zfs - health: $FIRST_LINE_HEALTH - capacity: $FIRST_LINE_CAP"

# What: Sent out the final bb message to hobbit server.
$BB $BBDISP "status $MACHINE.$TEST $DISPCOLOR `date` $FIRST_LINE $STRING"
  • 在 hobbit 客户端上测试。
bash-3.00$ export BB=/opt/hobbitclient42/bin/bb
bash-3.00$ export BBDISP="hobbit.my.com"
bash-3.00$ export MACHINE="hobbitclient.my.com"
bash-3.00$ ksh -x  zfs.ksh
+ DISKYELL=80
+ DISKRED=90
+ TEST=zfs
+ COLOR=GREEN
+ STRING=<table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr>
+ read name size used avail cap health altroot
+ /usr/sbin/zpool list -H
+ [ ONLINE == ONLINE ]
+ COLOR=green
+ cut -d% -f1
+ echo 0%
+ [ 0 -lt 80 ]
+ COLOR=green
+ [ green == red -o green == yellow ]
+ STRING=<table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr> <tr><td>&green</td><td>mypool</td><td>ONLINE</td><td>0%</td></tr>
+ read name size used avail cap health altroot
+ STRING=<table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr> <tr><td>&green</td><td>mypool</td><td>ONLINE</td><td>0%</td></tr> </table><br><br>
+ + /usr/sbin/zpool status -xv
STRING=<table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr> <tr><td>&green</td><td>mypool</td><td>ONLINE</td><td>0%</td></tr> </table><br><br>all pools are healthy
+ date
+ /opt/hobbitclient42/bin/bb hobbit.my.com status .zfs  Thu Apr 12 10:05:43 CDT 2007 <table border=0 cellpadding=10><tr><th></th><th>Zpool Name</th><th>Status</th><th>Capacity</th></tr> <tr><td>&green</td><td>mypool</td><td>ONLINE</td><td>0%</td></tr> </table><br><br>all pools are healthy
bash-3.00$
  • 检查数据是否到达 Hobbit 服务器。

使用 Big Brother 脚本而不将其转换为 hobbit

[编辑 | 编辑源代码]

在您的 hobbit 服务器上运行最新的 Big Brother 客户端。从该客户端执行所需的脚本,它将向 hobbit 报告。例如,使用最新的“bb-mrtg.pl”脚本监控您的 mrtg 图表

添加自定义图表

[编辑 | 编辑源代码]

阅读 hobbitd_rrd 的手册页

添加对数据库后端的支持

[编辑 | 编辑源代码]

我还没有这样做,但这将很容易实现。为了报告,您只想了解发生了哪些状态变化,因此您只需想出一个 Hobbit“工作模块”来接收来自 Hobbit“stachg”通道的消息,并将它们存储在您的数据库中。

工作模块可以用您喜欢的任何语言编写,尽管出于性能原因,我不建议使用 shell 脚本。Perl、Python、C、C++、Java……选择您最喜欢的编程工具。

该模块需要做的只是从其标准输入文件句柄中读取消息并将它们存储在数据库中。每条消息的格式如下

 @@stachg|timestamp|sender|origin|hostname|testname|expiretime|color|prevcolor|changetime
 <new status message>
 @@

很容易挑选出第一行并从该行中获取所有必要的信息。

Hobbit 源代码中提供了一个示例模块,请参阅“hobbit-4.0-RC4/hobbitd/hobbitd_sample.c”文件,该文件说明了如何在 C 中构建工作模块。

将 Hobbit 作为具有 BB 服务器的客户端安装

[编辑 | 编辑源代码]

如果您想将 Hobbit 作为具有 BB 服务器的客户端使用,则有一些需要注意的地方:Hobbit 客户端通常从服务器获取其配置,并且标准协议不同。为了使其向后兼容,需要在 hobbit 客户端侧进行一些变通方法。

Debian Unix 操作系统的示例,如有必要,请调整。

以 root 身份启动

  apt-get install gcc make
  apt-get install libpcre3 libpcre3-dev
  useradd -m hobbit
  su - hobbit

我们是 hobbit!

  tar zxfv .../hobbit-4.2.0.tar.gz
  cd hobbit-4.2.0
  ./configure --client
回答客户端
回答 hobbit
回答 /home/hobbit
回答 10.0.4.5(用您的 BB 服务器的 IP 地址替换)
  make
  make install
  cd
  chmod +w client/runclient.sh
  vi client/runclient.sh
添加 MACHINEDOTS="f.q.d.n",即客户端的 fqdn
在以 hobbitlaunch 开头的行上添加 --local
  vi client/etc/hobbitclient.cfg
添加 BBMAXMSGSPERCOMBO=1
  exit

我们再次是 root!

创建 /etc/init.d/hobbit 如下

  #!/bin/sh
  su hobbit -c "/home/hobbit/client/runclient.sh $1"
  
  chmod +x /etc/init.d/hobbit
  update-rc.d hobbit defaults
  
  /etc/init.d/hobbit start

使用反向 SSH 隧道监控 DMZ 中的 Hobbit 客户端

[编辑 | 编辑源代码]

注意:在 使用 Xymon 进行系统监控/管理指南 页面上记录了执行此类操作的其他方法。

操作系统:Red Hat Enterprise Linux 5
Hobbit 版本:Hobbit 4.2.0

在某些情况下,您可能希望监控与 Hobbit 服务器通过防火墙隔开的 Hobbit 客户端(例如,位于 DMZ 中的 Hobbit 客户端),并且您无法从 Hobbit 客户端到 Hobbit 服务器打开端口 1984 的入站连接。另一种选择是使用反向 SSH 隧道,使用 Padraig Lennon 的 ssh_tunnels.sh 脚本

请注意,为了本文档的目的,假设 hobbit 用户的主目录为 /usr/lib/hobbit

无密码 SSH 身份验证

[编辑 | 编辑源代码]

对于 hobbit 用户,在 Hobbit 服务器和 Hobbit 客户端之间设置无密码 SSH 身份验证。

在 Hobbit 服务器上,使用空密码生成私钥/公钥对

# su - hobbit

$ ssh-keygen -t dsa

Generating public/private dsa key pair.
Enter file in which to save the key (/usr/lib/hobbit/.ssh/id_dsa):
Created directory '/usr/lib/hobbit/.ssh'.
Enter passphrase (empty for no passphrase):  <-- Ensure that you create an empty passphrase, i.e. just hit Enter.
Enter same passphrase again:
Your identification has been saved in /usr/lib/hobbit/.ssh/id_dsa.
Your public key has been saved in /usr/lib/hobbit/.ssh/id_dsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:x:xx:xx hobbit@servername

这应该在位于 hobbit 用户主目录中的 .ssh 目录中创建以下文件

$ ls -ld /usr/lib/hobbit/.ssh
drwx------ 2 hobbit hobbit 4096 Aug 14 12:16 /usr/lib/hobbit/.ssh

$ ls -lR /usr/lib/hobbit/.ssh
/usr/lib/hobbit/.ssh:
total 12
-rw------- 1 hobbit hobbit  668 Aug 14 12:14 id_dsa
-rw-r--r-- 1 hobbit hobbit  603 Aug 14 12:14 id_dsa.pub

如果由于某种原因密钥对的创建失败,请尝试在生成密钥对之前手动在 hobbit 用户的主目录中创建 .ssh 文件夹。确保该文件夹由 hobbit 用户和组拥有,并且其权限正确

# chown hobbit:hobbit /usr/lib/hobbit/.ssh
# chmod 700 /usr/lib/hobbit/.ssh

现在,您想将生成的公钥(id_dsa.pub)复制到 Hobbit 客户端。确保 .ssh 文件夹以相同的权限存在于 Hobbit 客户端上的 hobbit 用户中,然后将 id_dsa.pub 复制到 Hobbit 客户端

$ scp /usr/lib/hobbit/.ssh/id_dsa.pub hobbit@hobbitclient:/usr/lib/hobbit/

在 Hobbit 客户端上

将从 Hobbit 服务器复制的公钥从“id_dsa.pub”重命名为“authorized_keys”。

$ mv /usr/lib/hobbit/id_dsa.pub /usr/lib/hobbit/authorized_keys

将 authorized_keys 文件移动到 hobbit 用户的 .ssh 目录。

$ mv /usr/lib/hobbit/authorized_keys /usr/lib/hobbit/.ssh/

检查 authorized_keys 文件是否具有正确的权限(chmod 644)。

$ ls -l /usr/lib/hobbit/.ssh/authorized_keys
-rw-r--r--  1 hobbit hobbit 603 Aug 14 12:20 /usr/lib/hobbit/.ssh/authorized_keys

从服务器 SSH 到客户端。您应该在提示时将客户端的主机密钥添加到服务器的 known_hosts 文件中,但不会提示输入密码。

配置 Hobbit 客户端

[编辑 | 编辑源代码]

在 Hobbit 客户端上将以下行添加到 /usr/lib/hobbit/client/etc/hobbitclient.cfg 中

BBDISP="127.0.0.1"

将 /etc/default/hobbit-client 配置如下

HOBBITSERVERS="127.0.0.1"

重启 Hobbit 客户端上的 hobbit-client 服务。

配置 Hobbit 服务器

[编辑 | 编辑源代码]

将 ssh-tunnels.sh 脚本复制到 Hobbit 服务器上的以下位置,并确保其权限正确(chmod 755)

-rwxr-xr-x 1 root root 5469 Aug 14 12:30 /usr/lib/hobbit/server/ext/ssh-tunnels.sh

修改 /etc/hobbit/hobbitlaunch.cfg

[ssh-tunnel]
    ENVFILE /usr/lib/hobbit/server/etc/hobbitserver.cfg
    CMD $BBHOME/ext/ssh-tunnels.sh
    LOGFILE $BBSERVERLOGS/ssh-tunnels.log
    INTERVAL 1m

在 /etc/hobbit/bb-hosts 文件中添加 Hobbit 客户端的条目(如果服务器到客户端不允许 ping,请使用“noconn”)

xx.xx.xx.xx    clientname       # noconn ssh-tunnel

如果 Hobbit 客户端的名称无法由 Hobbit 服务器解析,请在 Hobbit 服务器的 /etc/hosts 文件中添加这些客户端的条目

xx.xx.xx.xx    clientname

从 ssh-tunnel.sh 版本 0.0.3 开始,您可以指定非标准 SSH 端口进行连接。例如

xx.xx.xx.xx    clientname       # noconn ssh-tunnel:2222

您也可以为客户端创建一个 DNS 条目,哪种更简单就用哪种。

以 hobbit 用户身份,手动 SSH 到每个 Hobbit 客户端至少一次,并在提示时将 Hobbit 客户端的主机密钥添加到 Hobbit 服务器的 known_hosts 文件中

$ ssh clientname
The authenticity of host 'clientname (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:x:xx:xx.
Are you sure you want to continue connecting (yes/no)?  yes

重启 Hobbit 服务器上的 hobbit 服务

# service hobbit restart

确认功能

[编辑 | 编辑源代码]

查看 /var/log/hobbit/ssh-tunnels.log 中是否有任何错误消息,例如:

ssh: clientname: Name or service not known

解决方案:确保 Hobbit 服务器可以解析 Hobbit 客户端的名称,例如在 Hobbit 服务器的 /etc/hosts 文件中添加 Hobbit 客户端的条目。

Host key verification failed.

解决方案:从 Hobbit 服务器手动 SSH 到 Hobbit 客户端至少一次,并在提示时将 Hobbit 客户端的主机密钥添加到 Hobbit 服务器的 known_hosts 文件中。

您可以验证 SSH 隧道是否已成功创建

$ ps -ef | grep ssh
hobbit    2187     1  0 Aug14 ?        00:00:02 ssh -fnNR 1984:hobbit:1984 clientname
hobbit    2805     1  0 Aug14 ?        00:00:02 ssh -fnNR 1984:hobbit:1984 clientname2

您还应该在 Hobbit 服务器的 Web 界面中看到一个名为“ssh-tunnel”的新列。

移动电话客户端

[编辑 | 编辑源代码]

如果您想从您的移动电话检查您的 hobbit / Xymon 状态,您可以使用以下应用程序

XyMon by dot knowledge: http://www.dot-knowledge.de/Home/android/xymon-monitor(在其中您可以找到 Android 市场链接)

Xydroid by Rune B. Broberg: http://mihtjel.dk/xydroid/ - 一个在 Android 手机上提供 Xymon 状态的最新项目。

另请参阅

[编辑 | 编辑源代码]
华夏公益教科书