为什么SAP ECC的系统,数据库总是和SAP的应用安装在一起
SAP PI服务器,版本731 SYBASE数据库运维故障解决2粒
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个字段。
按模块来设计我的监控工具,大致有这几个模块: