标签 Linux 下的文章

使用ServerStatus项目实现多服务器云监控

使用ServerStatus项目实现多服务器云监控

前言

相信很多爱折腾的人手里都有不止一个服务器,或者是VPS,或者是独立服务器。当手里的服务器数量较多时,管理上就会有些麻烦。最常见的需求就是快速的确定服务器的运行状态,比如:是否在线,CPU、内存、网络的占用。手动检查每台服务器获取这些信息是不现实的,所以我们就需要一个方案来实现这个需求。传统的企业方案包括Nagios、zabbix等实现繁琐,本人也不会(流下了没有技术的泪水)。有个方案叫linux-dash挺漂亮,貌似只能给单机做状态页,一台服务器的朋友可以考虑玩一下,但其不在本文讨论范围内。最终,我找到了ServerStatus中文版这个方案。

引用其作者的话:ServerStatus中文版是一个酷炫高逼格的云探针、云监控、服务器云监控、多服务器探针~。ServerStatus监控的数据较多,可提供网络状态、开机时间、负载、实时网速、流量统计、处理器、内存、硬盘、进程数、主机到三网(CU,CT,CM)每小时丢包率等数据,界面酷炫,数据一目了然。其主要由客户端与服务端构成,服务端要求运行在一个有网站空间的Linux系统上。客户端分为两个版本:一个是Linux版本,使用Python实现;一个是跨平台版本,使用Python配合psutil跨平台依赖库实现,该版本客户端可在Windows系统上部署。

读懂实践本文,你可能需要在技能树中点亮以下技能:

  • 会通过搜索引擎尝试解决遇到的问题;
  • 基本的Windows系统与Linux系统操作;
  • 会使用一款SSH客户端;

准备

  • 运行Windows电脑一台(其他系统也可,但具体某些操作可能不同)
  • VPS几台,运行Linux系统或Windows系统。KVM或OpenVZ架构均可;有钱人上独服也行
  • 一台Linux系统VPS(或独服),我使用的CentOS7
  • SSH客户端,我用的是Putty

操作警告:

  • 错误的操作可能导致服务器系统损坏,这意味着潜在的服务停止与数据损失风险,请注意对重要数据做好备份!本人及相关项目的作者等均不会对使用软件造成的损失负责,亦不会对您学习本文的操作负责。继续操作,请自行承担风险!
  • 本方案虽支持监控Windows主机,但本人使用效果并不好,存在频繁掉线问题。这并不能代表您使用时也会遇到此问题,但若您的基本需求为监测Windows主机,请慎重考虑本方案。

步骤

  • 1.统计各被检测主机信息
  • 2.配置服务端
  • 3.配置客户端

1.统计各被检测主机信息

想要做一个多服务器状态监测页,首先应确认自己有多少服务器需要监测,为每台服务器命名,准备好以下信息:

  • 连接用户名:每台客户端唯一的用户名,用于服务器确认是哪一台客户端。
  • 服务器名称:服务器的名称,给人看的名字,在监控页面上会以节点名称显示。
  • 服务器类型:用于标记主机类型,VPS一般填写虚拟化方式。
  • 服务器提供商:这个信息服务端配置文件中有填写位置,但ServerStatus中文版中作者未提供展示。
  • 服务器位置:用户标记服务器所属地理位置。
  • 连接密码:与用户名对应,提供服务端对客户端的认证。

2.配置服务端

选择一台Linux服务器作为服务端,一般要求网络较好,稳定性好,否则状态页挂了也是蛮丢人的。我使用的CentOS7系统,其他Linux系统应该也是可以的,但操作可能不一样,具体可以参考Github项目页Readme。

  1. 使用SSH客户端登陆服务器,并使用以下命令检查更新,期间出现y/n请输入y确认:

    yum update
    
  2. 使用以下命令检查Python版本(注意V为大写):

    python -V
    
    • 查看回显的版本信息是否为Python2.7或以上,若为Python2.6或更低,则需要升级Python版本。具体可使用搜索引擎搜索,本文暂不讨论。
    • 若提示命令不存在,则可能未安装Python或安装的Python已损坏,请尝试安装Python2.7。具体操作请自行搜索。
  3. 配置Web环境,使用LNMP,一般大家可以使用LNMP一键脚本实现,网上找一下很多。我因服务器还有它用,使用的宝塔面板,其一键安装脚本简单易用,安装宝塔后按照提示登陆管理页面,直接在图形界面下完成LNMP的配置。安装时间由服务器性能决定,一般时间较长,建议考虑冲杯咖啡,或可再开个SSH页面先去学习配置客户端。以下为宝塔面板一键脚本:

    yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
    
  4. 宝塔面板下,LNMP配置完成后,打开网站选项,点击添加站点,如果有域名就填写域名(比如:uptime.xx.com),使用域名勿忘去服务商那里添加解析记录;没有就填写ip:端口,然后可将根目录改个好记的名字(比如:uptime),其他保持默认,点击创建。
    如使用一键LNMP方案,请参考其作者提供的使用说明添加网站。
  5. 使用git命令拉取项目代码,命令如下:

    git clone https://github.com/cppla/ServerStatus.git
    

    若提示-bash: git: command not found,则表示没有安装git,可尝试运行yum –y install git命令安装git。

  6. 使用cd ServerStatus命令进入文件夹。将 web 文件夹内的内容放到网站目录,不同 LNMP 方案可能不同,假设我的文件夹是/www/wwwroot/uptime,我使用命令 cp -r /web/* /www/wwwroot/uptime将 web 文件夹内的文件复制到/www/wwwroot/uptime内,如有提示是否覆盖,则输入y确定。
  7. 此时正常的话我们打开网站就能看到页面了,因为我们服务端没有运行,网页上有相关错误提示,无需理会。
  8. 使用cd server命令进入server文件夹,然后运行make命令编译,等待其编译成功。使用./sergate命令测试是否有错误,没有错误按Ctrl+C结束即可。有错误请检查35601端口是否被占用,若端口被占用请排除或使用参数--port=<端口号>更改端口号运行。
  9. 使用 vi config.json 命令修改config.json文件,需要注意username, password的值需要和对应的客户端对应一致。

    {"servers":
        [
            {
                "username": "连接用户名",
                "name": "服务器名称",
                "type": "主机类型",
                "host": "主机服务商",
                "location": "主机地理位置",
                "password": "与用户名对应的一个难被猜到的密码"
            },
        ]
    }       
    • vi编辑器使用:按i键进入输入模式,编辑完后按ESC键退出编辑模式,输入进入命令模式,输入wq命令保存并退出。若没有vi编辑器或不习惯使用vi编辑器,可用其他编辑器替代,具体使用方法请自行通过搜索引擎查询。

    创建/usr/local/share/ServerStaus/目录,将以上 server 文件夹放到此目录下。

  10. 使用以下格式命令尝试运行服务端,并打开网页看是否正常,若正常请按Ctrl+C退出:

    ./sergate --port=35601 --config=config.json --web-dir=/www/wwwroot/uptime

    以下为各参数对应功能:

    -h, --help            显示此帮助信息并退出
    -v, --verbose         详细输出模式
    -c, --config=<str>    指定配置文件
    -d, --web-dir=<str>   填写Web文件夹位置
    -b, --bind=<str>      Bind to address(看不懂,哪位大佬若看得懂请留言,谢)
    -p, --port=<int>      指定侦听的端口
    
  11. 使用vi /etc/systemd/system/sergate.service命令创建文件 /etc/systemd/system/sergate.service 填入以下内容保存并退出,需注意,ExecStart项目需要参考操作10自行确认:

    # /etc/systemd/system/sergate.service
    
    [Unit]
    Description=ServerStatus Master Server
    After=syslog.target
    After=network.target
    
    [Service]
    Type=simple
    WorkingDirectory=/usr/local/share/ServerStatus/server
    ExecStart=/usr/local/share/ServerStatus/server/sergate --config=config.json --port=35601 --web-dir=/www/wwwroot/uptime
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=sergate
    
    [Install]
    WantedBy=multi-user.target
    
    • vi编辑器使用:按i键进入输入模式,编辑完后按ESC键退出编辑模式,输入进入命令模式,输入wq命令保存并退出。若没有vi编辑器或不习惯使用vi编辑器,可用其他编辑器替代,具体使用方法请自行通过搜索引擎查询。
  12. 创建sergate.service文件后,可使用systemctl start sergate运行服务,使用systemctl enable sergate命令将其加入开机启动。若有需要增减客户端,或其他原因需要停止服务,可使用systemctl stop sergate命令停止服务。如需要检查服务运行状态,可使用systemctl status sergate命令输出状态信息。

    请注意,此为Systemd启动方式,CentOS6不支持此方式,若您的系统不支持,请自行查找可用的方式启动。

3.配置客户端

服务端就绪后能看到监控页满屏的红色,不要慌,接下来配置客户端。客户端程序是用Python实现,在ServerStatus/clients目录下,它有两个版本,client-linux为普通Linux版,client-psutil为跨平台版,普通版不成功,请尝试换用跨平台版,Windows需要使用跨平台版。

使用Linux版本:

此处依然以CentOS7为例,其他系统会有不同,请自行摸索。

  1. 使用SSH客户端登陆服务器,并使用以下命令检查更新,期间出现y/n请输入y确认:

    yum update
    
  2. 使用以下命令检查Python版本(注意V为大写):

    python -V
    
    • 查看回显的版本信息是否为Python2.7或以上,若为Python2.6或更低,则需要升级Python版本。具体可使用搜索引擎搜索,本文暂不讨论。
    • 若提示命令不存在,则可能未安装Python或安装的Python已损坏,请尝试安装Python2.7。具体操作请自行搜索。
  3. 运行以下命令创建/usr/local/share/ServerStatus目录并进入该目录,直接从Github下载 client-linux.py 文件到此目录中。

    mkdir /usr/local/share/ServerStatus
    cd /usr/local/share/ServerStatus
    wget https://github.com/cppla/ServerStatus/raw/master/clients/client-linux.py
    
  4. 运行 vi client-linux.py 命令使用vi编辑器打开client-linux.py文件,根据自己需求修改以下部分内容并保存:

    SERVER = "<服务端地址>"
    PORT = <服务端设置的端口号>
    USER = "之前为本机定义的连接用户名"
    PASSWORD = "之前为本机定义的与用户名对应的一个难被猜到的密码"
    
    • vi编辑器使用:按i键进入输入模式,编辑完后按ESC键退出编辑模式,输入进入命令模式,输入wq命令保存并退出。若没有vi编辑器或不习惯使用vi编辑器,可用其他编辑器替代,具体使用方法请自行通过搜索引擎查询。
  5. 运行 chmod +x client-linux.py 命令为文件 client-linux.py 赋予可执行权限。使用以下命令运行客户端,检查状态页显示是否正常,若正常按Ctrl+C退出。

    ./client-linux.py
    
  6. 运行 vi /etc/systemd/system/serverstatus.service 命令使用vi编辑器在目录/etc/systemd/system/创建文件 serverstatus.service。填入以下内容保存并退出:

    #/etc/systemd/system/serverstatus.service
    
    [Unit]
    Description=ServerStatus Client
    Documentation=https://github.com/LexsionLee/ServerStatus
    After=network.target
    
    [Service]
    Type=simple
    IgnoreSIGPIPE=no
    ExecStart=/usr/local/share/ServerStatus/client-linux.py
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
  7. 创建serverstatus.service文件后,可使用systemctl start serverstatus.service命令运行服务,使用systemctl enable serverstatus.service命令将其加入开机启动。若要停止服务,可使用systemctl stop serverstatus.service命令停止服务。如需要检查服务运行状态,可使用systemctl status serverstatus.service命令输出状态信息。

至此,在CentOS7上配置客户端就完成了,若一切正常,我们就能在监控页面看到我们的客户端主机状态信息了。

使用psutil跨平台版本(For Windows)

此处以 Windows 7 为例讲述如何在 Windows 下配置ServerStatus的psutil跨平台版本客户端。

  1. 访问Python官方网站点击Downloads->Windows从出现的下载页获取Python2.7.X。请自行选择下载32位或64位版本。有网帖表示Python3可能不行,本人未作测试。
  2. 双击下载的.msi文件运行安装程序,安照提示安装,在功能自定义页面的 Add pytnon.exe to Path 处选择 Will installed on local hard drive ,点击Next安装,若出现UAC提醒请允许。安装完成后点击Finish退出安装程序。
  3. 按 Windows徽标键+R键 打开 “运行” 对话框,输入 cmd 按 Enter键 打开命令提示符。在命令提示符中输入以下命令安装psutil跨平台软件包:

    pip install psutil
    
  4. 访问ServerStatus中文版GitHub项目页,从
    clients目录下找到client-psutil.py文件页,点击Raw按钮直接下载文件。
  5. 将下载的client-psutil.py文件放到一个合适的目录。比如我在C盘下创建了一个文件夹 ServerStatus ,将其存在此。在此文件上右击,点击Edit with IDLE(亦可使用其他编辑器打开)。参考Linux版本配置小节中的说明填写配置信息保存并退出编辑器。
  6. 双击client-psutil.py文件运行,检查监控页是否正常显示,然后关闭窗口停止。
  7. 点击开始->所有程序->启动->右击->打开,创建一个ServerStatusClient.bat文件,填写运行client-psutil.py的代码,我的文件在C:\ServerStatus\下,参考如下:

    python C:\ServerStatus\client-psutil.py
    • 注意该操作可能被安全软件拦截,请在安全软件中设置例外。

此方法配置的客户端在启动时会一直显示一个终端窗口,关闭窗口后客户端即停止工作。强迫症患者慎用!如果希望没有窗口显示,请自行研究解决。

参考:

1:Cppla 大佬的 ServerStatus GitHub 页

2:BotoX 大佬的 ServerStatus GitHub 页