我的BasisAgent运维监控工具(一)telnet

BasisAgent   (basis运维监控工具)

SAP BASIS运维需要监控服务器主机的运行状态,多年以来,

我都是手工到系统去检查和统计操作系统层的信息,

这次,我准备自己来做一个,因为我面对了10个aix和50个suse。


我给自己提出了工具的需求:

1、telnet登录主机收集shell命令数据,AIX主机需要收集的指标数据是df -g和errpt

2、SSH登录主机收集shell命令数据,suse主机需要收集的指标数据是df -h和/var/message

3、数据存储在SQLlite文件数据库中,主机密码有加密

4、工具定时统计主机信息,检测异常给管理员邮箱发邮件

5、主机shell数据用模板库来管理

6、完成后放在github上


工具还是用C# WINFORM来搞,最简单。

首先,为了实现telnet登录,我找到了 https://download.csdn.net/download/qianlicao412/9670090

需要在项目中引用入 Dart.Telnet.dll,Dart.Telnet.xml

程序取到了完整的df -g文件系统数据,接下了需要把这个结构化的字符串,

按模版识别分解后放到关系型的Sqllite数据库里。



实现telnet shell完整的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Dart.Telnet;

namespace telnet23
{
    public partial class Form1 : Form
    {
        static Telnet telnet1 = new Telnet();
        static TelnetModel telnetModel = new TelnetModel(); 

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //Wire-up events
            telnet1.Data += new EventHandler<DataEventArgs>(telnet1_Data);
            telnet1.Error += new EventHandler<ErrorEventArgs>(telnet1_Error);          

            telnetModel = new TelnetModel();
            telnetModel.Telnet = telnet1;

            try
            {             
                telnetModel.Session.RemoteEndPoint.HostNameOrAddress = "主机IP";
                telnetModel.Session.RemoteEndPoint.Port = 23;
                telnetModel.Credentials.Username = "用户名";
                telnetModel.Credentials.Password = "密码";
                telnetModel.Credentials.CommandPrompt = "#";
                telnetModel.CommandString = "df -g";                                
                telnetModel.Execute(null);               
               
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }

        }        

         void telnet1_Error(object sender, ErrorEventArgs e)
        {
            string expText = e.GetException().ToString();
            if (e.GetException() is NotImplementedException)
                expText = "NOTE: A NotImplementedException may be thrown when running under Mono.\r\n\r\n" + expText;
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(expText);
            Console.ForegroundColor = ConsoleColor.Gray;
        }

         void telnet1_Data(object sender, DataEventArgs e)
        {
            textBox1.Text = textBox1.Text + Encoding.ASCII.GetString(e.Data.Buffer, e.Data.Offset, e.Data.Count);
        }

    }
}


关于模板库:

prd2:root[/]#df -g
Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd4           5.00      4.52   10%    13651     2% /
/dev/hd2          10.00      5.36   47%    80728     7% /usr
/dev/hd9var        2.00      1.30   35%    10899     4% /var
/dev/hd3          10.00      8.55   15%     2555     1% /tmp
/dev/hd1           2.00      1.99    1%      117     1% /home
/dev/hd11admin      0.50      0.50    1%        9     1% /admin
/proc                 -         -    -         -     -  /proc
/dev/hd10opt       0.50      0.28   45%     7114    10% /opt
/dev/livedump      0.50      0.50    1%        9     1% /var/adm/ras/livedump
/dev/lvsaphome     10.00      8.99   11%     1087     1% /usr/sap
/dev/lvsapaas     10.00      2.56   75%    28777     5% /usr/sap/EP2
/dev/vol_nbu      15.00     11.17   26%     2142     1% /usr/openv
prd:/export/usr/sap/trans     50.00     33.71   33%    17418     1% /usr/sap/trans
prd:/export/sapmnt/EP2     20.00     17.17   15%    16359     1% /sapmnt/EP2

今天终于找到分解df -g的方法,
Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd4           5.00      4.40   12%    13646     2% /

把telnet命令得到的大文本,按头“/dev/hd4”和尾“/”查找,可以得到中间5个字段。
按每一个文件系统建立一个关键字模版,程序每次完整的得到5个字段串,然后转成5个字段。

按模块来设计我的监控工具,大致有这几个模块:


猜你喜欢

转载自blog.csdn.net/ot512csdn/article/details/80027690
今日推荐