#
04-07
1. 測(cè)試了現(xiàn)有的代碼,僅找到很少的幾條鏈路,而且結(jié)果還不正確。
2. 最奇怪的是,bridge.mib里的fdb表都沒有數(shù)據(jù),我的發(fā)現(xiàn)算法是基于fdb來(lái)作的,
fdb表沒數(shù)據(jù),肯定找不到鏈路。
3. 突然想起北京同事說(shuō)的NDP,于是想用華為的NDP試試,加載huawei-hgmp.mib,
結(jié)果發(fā)現(xiàn)H3C的設(shè)備里根本沒有數(shù)據(jù),太失望了。
04-08
1. 想起三年前在安徽恒源的痛苦經(jīng)歷,但最終是用STP得到正確的結(jié)果。于是,我又試了
基于STP的發(fā)現(xiàn),還是沒結(jié)果。為什么?因?yàn)镾TP里的數(shù)據(jù)不滿足算法的要求。
2. 看來(lái)這次真的遇到挑戰(zhàn)了。路由表里全是OSPF,我又想起曾經(jīng)看過(guò)一篇文章,寫的是基本
OSPF的拓?fù)浒l(fā)現(xiàn)。在網(wǎng)上搜索了半天,只有萬(wàn)方的論文里有相關(guān)文章,無(wú)奈之下,只好用
手機(jī)短信花了3塊錢下了一篇論文。按論文里的算法,改了程序,經(jīng)測(cè)試后,雖然有點(diǎn)進(jìn)步,
但仍有多臺(tái)設(shè)備處于孤立狀態(tài),找不到鏈路,太郁悶了。
3. 用SolarWinds下載了所有h3c上的mib,回賓館研究。發(fā)現(xiàn)SolarWinds在win7下的一個(gè)bug,
導(dǎo)出功能完全不能用,我只好把結(jié)果存成txt。
04-09
1. 從下載的mib數(shù)據(jù)中驚奇地發(fā)現(xiàn),h3c使用了Q-bridge而不是bridge,這就難怪bridge里的fdb
表沒有數(shù)據(jù)。這又讓我心中燃起了希望。但Q-bridge里的address這一字段沒數(shù)據(jù),所以要用
walk(而不是table)才能取到數(shù)據(jù)。
2. 專門寫了一個(gè)取Q-bridge fdb表數(shù)據(jù)的類。核心交換h3c7510中的fdb表項(xiàng)巨大,大約有800條
之多,snmp4j沒取完就超時(shí)了,用SolarWinds也會(huì)出現(xiàn)超時(shí)的現(xiàn)象。
3. 再次測(cè)試了發(fā)現(xiàn)程序,由于有了fdb表的數(shù)據(jù),多找出好多鏈路,但仍不完整。
4. 收集了所有設(shè)備的mib數(shù)據(jù),回廣州慢慢研究。
在揭陽(yáng)的三天三夜,緊張而痛苦。我真的遇到一個(gè)大難題......
stored procedure
創(chuàng)建
create procedure sp_name()
begin
………
end
調(diào)用
call sp_name()
注意:存儲(chǔ)過(guò)程名稱后面必須加括號(hào),哪怕該存儲(chǔ)過(guò)程沒有參數(shù)傳遞
刪除
drop procedure sp_name
其他
1.show procedure status
顯示數(shù)據(jù)庫(kù)中所有存儲(chǔ)的存儲(chǔ)過(guò)程基本信息,包括所屬數(shù)據(jù)庫(kù),存儲(chǔ)過(guò)程名稱,創(chuàng)建時(shí)間等
2.show create procedure sp_name
顯示某一個(gè)存儲(chǔ)過(guò)程的詳細(xì)信息
例子:
CREATE PROCEDURE `bag_app_flow`()
insert into bag_app_flow
select pid,avg(in_speed),avg(out_speed),max(log_time) log_time
from bag_app_flow_raw
where hour(now()) - hour(log_time) = 1
group by pid,date_format(log_time,'%Y-%m-%d %H');
--------------
event
使用下列的任意一句開啟計(jì)劃任務(wù):
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
Event Scheduler創(chuàng)建的基本語(yǔ)法是:
CREATE EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement
如果要調(diào)用procedure
call sp_name() ,如
create event flow_job
on schedule every 1 hour
starts '2009-12-26 18:06:00'
do
call bag_ip_flow();
如果有多個(gè)procedures,則要加begin...end,如
create event flow_job
on schedule every 1 hour
starts '2009-12-26 18:06:00'
do
begin
call bag_app_flow();
call bag_ip_flow();
call bag_ip_group_flow();
end
在研究了思科的Trap以及朗訊的Trap后,總結(jié)出處理trap的思路:
摘要: JPCAP——JAVA中的數(shù)據(jù)鏈路層控制
一.JPCAP簡(jiǎn)介
眾所周知,JAVA語(yǔ)言雖然在TCP/UDP傳輸方面給予了良好的定義,但對(duì)于網(wǎng)絡(luò)層以下的控制,卻是無(wú)能為力的。JPCAP擴(kuò)展包彌補(bǔ)了這一點(diǎn)。
JPCAP實(shí)際上并非一個(gè)真正去實(shí)現(xiàn)對(duì)數(shù)據(jù)鏈路層的控制,而是一個(gè)中間件,JPCAP調(diào)用wincap/libpcap,而給JAVA語(yǔ)言提供一個(gè)公共的接口,從而實(shí)現(xiàn)了平臺(tái)無(wú)關(guān)性。...
閱讀全文
碼率就是數(shù)據(jù)傳輸時(shí)單位時(shí)間傳送的數(shù)據(jù)位數(shù),一般我們用的單位是kbps即千位每秒。
通俗一點(diǎn)的理解就是取樣率,單位時(shí)間內(nèi)取樣率越大,精度就越高,處理出來(lái)的文件就越接近原始文件,但是文件體積與取樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的碼率達(dá)到最少的失真,圍繞這個(gè)核心衍生出來(lái)的cbr(固定碼率)與vbr(可變碼率),都是在這方面做的文章,不過(guò)事情總不是絕對(duì)的,從音頻方面來(lái)說(shuō),碼率越高,被壓縮的比例越小,音質(zhì)損失越小,與音源的音質(zhì)越接近。
計(jì)算機(jī)中的信息都是二進(jìn)制的0和1來(lái)表示,其中每一個(gè)0或1被稱作一個(gè)位,用小寫b表示,即bit(位);大寫B(tài)表示byte,即字節(jié),一個(gè)字節(jié)=八個(gè)位,即1B=8b;前面的大寫K表示千的意思,即千個(gè)位(Kb)或千個(gè)字節(jié)(KB)。表示文件的大小單位,一般都使用字節(jié)(KB)來(lái)表示文件的大小。
Kbps:首先要了解的是,ps指的是/s,即每秒。Kbps又稱比特率,指的是數(shù)字信號(hào)的傳輸速率,也就是每秒鐘傳送多少個(gè)千位的信息(K表示千位,Kb表示的是多少千個(gè)位);Kbps也可以表示網(wǎng)絡(luò)的傳輸速度,為了在直觀上顯得網(wǎng)絡(luò)的傳輸速度較快,一般公司都使用kb(千位)來(lái)表示,如果是KBps,則表示每秒傳送多少千字節(jié)。1KByte/s=8Kbps(一般簡(jiǎn)寫為1KBps=8Kbps)。ADSL上網(wǎng)時(shí)的網(wǎng)速是512Kbps,如果轉(zhuǎn)換成字節(jié),就是512/8=64KBps(即64千字節(jié)每秒)
在這里需要說(shuō)明的問題是在單位換算上有一點(diǎn)是極其重要的即:1Mb=1024kb=1024000b 而1MB=1024KB=1024*1024B=1024*1024*8b=8388608b這在數(shù)量上差的很多
值得注意的是:
1KB=1024B=1024*8b 1kB=1000B=8000b
1Kb=1kb=1000b
在單位換算上一定要注意 正常是以KBps來(lái)表示帶寬
KBps與kBps的區(qū)別
小k代表kilo,千的意思,也就是1000,而B就是字節(jié)的意思,ps就是每秒的意思,那么連起來(lái)Bps就是字節(jié)每秒的意思。
那么kBps就是1000Bps也就是一千字節(jié)每秒的意思。
而大家都知道在電腦里,KB和B是不同的單位,他們之間換算是1KB=1024B的。
而KBps(K為大寫字母)就等于1024Bps。而kBps(k為小寫字母)的意思是千字節(jié)每秒。
千字節(jié)每秒(KBps)與一千字節(jié)每秒(kBps)是不同的。
KBps=1024Bps,kBps=1000Bps
也就是說(shuō)KBps>kBps [1]
人們常用Kbps形容音樂的聽覺效果。
在WINDOWS 中它被稱為“位速”,在一些播放器中被形容為“比特率”。
質(zhì)量是指將數(shù)字聲音由模擬格式轉(zhuǎn)化成數(shù)字格式的采樣率,采樣率越高,還原后的音質(zhì)就越好。
●Kbps值與現(xiàn)實(shí)音頻對(duì)照:
16Kbps=電話音質(zhì)
24Kbps=增加電話音質(zhì)、短波廣播、長(zhǎng)波廣播、歐洲制式中波廣播
40Kbps=美國(guó)制式中波廣播
56Kbps=話音
64Kbps=增加話音(手機(jī)鈴聲最佳比特率設(shè)定值、手機(jī)單聲道MP3播放器最佳設(shè)定值)
112Kbps=FM調(diào)頻立體聲廣播
128Kbps=磁帶(手機(jī)立體聲MP3播放器最佳設(shè)定值、低檔MP3播放器最佳設(shè)定值)
160Kbps=HIFI高保真(中高檔MP3播放器最佳設(shè)定值)
192Kbps=CD(高檔MP3播放器最佳設(shè)定值)
256Kbps=Studio音樂工作室(音樂發(fā)燒友適用)
實(shí)際上隨著技術(shù)的進(jìn)步,音樂質(zhì)量也越來(lái)越高,MP3的最高質(zhì)量為320Kbps,但一些格式可以達(dá)到更高的質(zhì)量和更高的音質(zhì)。
比如正逐漸興起的APE音頻格式,能夠提供真正發(fā)燒級(jí)的無(wú)損音質(zhì)和相對(duì)于WAV格式更小的體積,其質(zhì)量通常為550kbps-----950kbps。
其他: 常見編碼模式:
VBR(Variable Bitrate)動(dòng)態(tài)比特率 也就是沒有固定的比特率,壓縮軟件在壓縮時(shí)根據(jù)音頻數(shù)據(jù)即時(shí)確定使用什么比特率,這是以質(zhì)量為前提兼顧文件大小的方式,推薦編碼模式;
ABR(Average Bitrate)平均比特率 是VBR的一種插值參數(shù)。LAME針對(duì)CBR不佳的文件體積比和VBR生成文件大小不定的特點(diǎn)獨(dú)創(chuàng)了這種編碼模式。ABR在指定的文件大小內(nèi),以每50幀(30幀約1秒)為一段,低頻和不敏感頻率使用相對(duì)低的流量,高頻和大動(dòng)態(tài)表現(xiàn)時(shí)使用高流量,可以做為VBR和CBR的一種折衷選擇。
CBR(Constant Bitrate),常數(shù)比特率 指文件從頭到尾都是一種位速率。相對(duì)于VBR和ABR來(lái)講,它壓縮出來(lái)的文件體積很大,而且音質(zhì)相對(duì)于VBR和ABR不會(huì)有明顯的提高。
產(chǎn)品功能介紹
一、 網(wǎng)絡(luò)管理
1. 網(wǎng)絡(luò)拓?fù)渥詣?dòng)發(fā)現(xiàn)。輸入核心設(shè)備的IP地址或核心子網(wǎng)的網(wǎng)絡(luò)地址,系統(tǒng)自動(dòng)發(fā)現(xiàn)設(shè)備以及鏈路,完成后畫出全網(wǎng)物理拓?fù)鋱D。
2. 拓?fù)鋱D展現(xiàn)。
① 將網(wǎng)絡(luò)自動(dòng)發(fā)現(xiàn)結(jié)果的以拓?fù)鋱D的形式進(jìn)行展示,提供設(shè)備、鏈路的實(shí)時(shí)信息。用戶也可對(duì)該圖進(jìn)行自定義的布局。
② 不同設(shè)備類型以不同的圖標(biāo)進(jìn)行展示,而且隨著設(shè)備運(yùn)行狀態(tài)(CPU使用率、內(nèi)存使用率和鏈路連通狀態(tài)等)變化其圖標(biāo)顏色(藍(lán)>黃>紅)亦相應(yīng)變化。
③ 可按IP或機(jī)器名搜索,快速定位到設(shè)備。
④ 可將拓?fù)鋱D另存為JPG圖片。
⑤ 鷹眼視圖為全網(wǎng)絡(luò)的縮略圖,點(diǎn)擊其中任一個(gè)點(diǎn)可定位到視圖上的設(shè)備。
3.設(shè)備基本性能數(shù)據(jù)。CPU、內(nèi)存、接口表、路由表、ARP表等。同時(shí),可下載設(shè)備配置文件,以作備份。
二、 服務(wù)器管理
1.基本性能信息:CPU、內(nèi)存、硬盤/文件系統(tǒng)利用率。
2.端口使用情況、進(jìn)程存活、安裝軟件、裸文件(Aix)。
3.可采集服務(wù)器日志作統(tǒng)計(jì)分析。
三、 數(shù)據(jù)庫(kù)管理
1. Oracle
①基本信息:所處的服務(wù)器名、數(shù)據(jù)庫(kù)版本、大小。
②響應(yīng)時(shí)間、用戶連接數(shù)、用戶權(quán)限角色。
③數(shù)據(jù)庫(kù)狀態(tài)、表空間利用率、數(shù)據(jù)庫(kù)鎖。
④ SGA擊中率、用戶會(huì)話、SQL執(zhí)行情況。
2. MS-SQL
①基本信息:數(shù)據(jù)庫(kù)所在的主機(jī)名、數(shù)據(jù)庫(kù)版本、數(shù)據(jù)庫(kù)文件路徑。
②響應(yīng)時(shí)間、緩存擊中率、內(nèi)存使用信息、查詢頁(yè)信息。
③事務(wù)鎖等待時(shí)間、數(shù)據(jù)文件大小、活動(dòng)用戶數(shù)。
3. My-SQL
①基本信息:數(shù)據(jù)庫(kù)所在操作系統(tǒng)的類型、數(shù)據(jù)庫(kù)版本、數(shù)據(jù)庫(kù)安裝路徑、數(shù)據(jù)文件路徑。
②響應(yīng)時(shí)間、每分鐘請(qǐng)求數(shù)、每秒發(fā)送/接收字節(jié)數(shù)、連接信息、線程信息。
③表詳細(xì)信息、用戶會(huì)話。
四、 中間件管理
1. Weblogic
①基本信息:操作系統(tǒng)類型、版本、使用JAVA版本、提供者。
②響應(yīng)時(shí)間、JVM使用率、JDBC連接池。
③線程池、web應(yīng)用會(huì)話。
2. Websphere
①響應(yīng)時(shí)間、JVM使用率。
② JDBC連接池、線程池、servlet會(huì)話。
3. Tomcat
①基本信息:Tomcat版本、操作系統(tǒng)類型、版本、JAVA版本、提供者。
②響應(yīng)時(shí)間、鏈接器線程、JVM堆棧使用情況、服務(wù)器請(qǐng)求。
③數(shù)據(jù)庫(kù)連接池、web會(huì)話。
五、Web服務(wù)器
1. HTTP URL
①頁(yè)面大小。
②響應(yīng)時(shí)間。
2. IIS
①響應(yīng)時(shí)間。
② IIS里各網(wǎng)站的性能參數(shù)。
六、IP地址管理
1. 基于子網(wǎng)的IP地址分布圖。
2. 基于子網(wǎng)的IP地址使用情況統(tǒng)計(jì)。
3. IP-MAC地址綁定,或者IP-MAC-交換機(jī)端口綁定。
4. IP定位:確定IP地址上聯(lián)交換機(jī)的端口。
七、事件及告警管理
1. 可接收設(shè)備Syslog數(shù)據(jù),按關(guān)鍵字匹配把Syslog轉(zhuǎn)成系統(tǒng)告警。
2. 可接收設(shè)備SNMP Trap數(shù)據(jù),可處理通用Trap數(shù)據(jù)。同時(shí),可按產(chǎn)商私有MIB來(lái)翻譯產(chǎn)商特殊的Trap數(shù)據(jù),并轉(zhuǎn)換成系統(tǒng)告警(需定制開發(fā))。
曾經(jīng)成功完成對(duì)朗讀ATM交換機(jī)Trap數(shù)據(jù)的完全解析。
3. 告警設(shè)置不僅限于閥值越界告警,還有屬性匹配告警、屬性變化告警以及實(shí)體增加或刪除告警。
4. 告警分析實(shí)現(xiàn)告警壓縮、告警合并(告警根源分析)、告警升級(jí)以及告警恢復(fù)通知。
5. 告警通知方式:Email、聲音、彈出窗口和手機(jī)短信。
6. 控制告警通知方式:連續(xù)式(每產(chǎn)生一次告警都發(fā)通知)、跳躍式(每隔3次告警才發(fā)通知)和一次式(僅發(fā)一次通知)。
八、報(bào)表管理
1. 網(wǎng)絡(luò)設(shè)備整體性能報(bào)表。
2. 服務(wù)器整體性能報(bào)表。
3.網(wǎng)絡(luò)設(shè)備接口性能報(bào)表。
4.服務(wù)器接口性能報(bào)表。
九、流量管理
1. 支持Netflow V5和V9。
2. 對(duì)于較小的網(wǎng)絡(luò)(設(shè)備數(shù)在100內(nèi)),可以用交換機(jī)端口鏡像(span)。系統(tǒng)用JPCAP采集原始數(shù)據(jù)。
十、可定制開發(fā)其它功能,比如實(shí)現(xiàn)對(duì)防火墻、防病毒系統(tǒng)和IDS的日志采集和分析。
系統(tǒng)截圖
http://www.tkk7.com/afunms/gallery/43080.html

用jar打包c(diǎn)lasses,老是會(huì)忘記
C:\java\jdk1.6.0_03\bin>jar cvf c:/nms.jar classes/*.*
ATM
網(wǎng)的拓?fù)浒l(fā)現(xiàn),在網(wǎng)上根本找不到相關(guān)資料,經(jīng)過(guò)自己長(zhǎng)時(shí)間的研究,終于有了結(jié)果。經(jīng)過(guò)實(shí)際驗(yàn)證,證明是正確的。
其實(shí)它比IP網(wǎng)的拓?fù)浒l(fā)現(xiàn)要簡(jiǎn)單得多。
獲取PVC:
PSAX ATM中有4種PVC:
ATM2ATM PVC
cirEm2ATM PVC
bridge2ATM PVC
gige2ATM PVC
由于在acmib中沒有定義gige2ATM PVC,所以只能找到其他三種PVC。
三種PVC的獲取方法:
PVC
|
Table
|
OID
|
ATM2ATM
|
atmPvcVccTable
|
1.3.6.1.4.1.1751.2.18.6.1.1
|
cirEm2ATM
|
cirEmAtmPvcVccTable
|
1.3.6.1.4.1.1751.2.18.6.6.1
|
bridge2ATM
|
bridgeAtmPvcVccTable
|
1.3.6.1.4.1.1751.2.18.6.13.1
|
算法:
(1) 找出所有active的pvc。
(2) pvc相同且pvc的服務(wù)類型(serviceType)相同的兩個(gè)atm之間存在一條物理鏈路。這兩表中sreviceType的代碼所表示的serviceType不相同,比如在atmPvcVccTable中serviceType定義為
SYNTAX INTEGER {
ubr(1),
vbr-nrt2(2),
vbr-nrt1(3),
vbr-rt2(4),
vbr-rt1(5),
vbr-express(6),
cbr4(7),
cbr3(8),
cbr2(9),
cbr1(10),
gfr2(11)
}
而在cirEmAtmPvcVccTable中為
SYNTAX INTEGER {
cbr-1(1),
cbr-2(2),
cbr-3(3),
cbr-4(4)
}
所以不能比較數(shù)字,而應(yīng)該比較字符串。
(3) 要得到pvc及其所在的接口,就必須得到三個(gè)表中的index,以bridgePvcVccTable為例:
以第一行來(lái)說(shuō)明 1305001.101001.11.260
1305001 interface sideA
101001 interface sideB
11.260 即PVC
所以在臺(tái)ATM中11-260這條PVC就是接在sideB(為什么取sideB而不是sideA?我現(xiàn)在還不明白)101001這個(gè)接口上。Interface的格式為SSPPCCC,以此得到物理接口0101。
有些鏈路找不到,可以肯定地說(shuō),是因?yàn)檎也坏?/span>gige2ATM pvc。
有了以上三張表,很容易把PSAX Trap翻譯過(guò)來(lái):

/** *//**
* 翻譯snmp trap
*/

private String translatePsaxTrap(Connection conn,SnmptrapDto dto) throws Exception
{
StringBuffer trap = new StringBuffer(200);
Statement stat = conn.createStatement();
String oid = dto.getOid() + "." + dto.getSpecifics();
ResultSet rs = stat.executeQuery("select b.description from acmib_oid a,acmib_event b where a.oid='" + oid + "' and a.symbol=b.symbol");
if(rs.next())
trap.append(rs.getString(1));
String[] msgs = dto.getMessage().split(",");

/** *//**
* 過(guò)濾掉最后一行1.3.6.1.4.1.1751.2.18.1.146.
*/

for(int i=0;i < msgs.length - 1;i++)
{
String[] _msgs = msgs[i].split("=");
String _oid = _msgs[0].substring(0,_msgs[0].length() - 3); //去掉最后.0
String _value = _msgs[1].trim();
rs = stat.executeQuery("select * from acmib_oid where oid='" + _oid + "'");

if(rs.next())
{
trap.append(rs.getString("symbol")).append("=").append(_msgs[1]);

if(rs.getString("symbol").endsWith("Code"))
{
ResultSet _rs = stat.executeQuery("select * from acmib_code where symbol='" + rs.getString("symbol") + "' and code=" + _value);
if(_rs.next())
trap.append("[").append(_rs.getString("description")).append("]");
}
trap.append(",");
}
}
return trap.toString();
}
(這里省略了接受SNMP Trap的代碼)
舉例1:
Trap原包內(nèi)容:
oid=1.3.6.1.4.1.1751.2.18.8.4
specifics=67
message=
1.3.6.1.4.1.1751.2.18.6.31.1.1.0 = 1309001,
1.3.6.1.4.1.1751.2.18.6.33.1.1.0 = 14,
1.3.6.1.4.1.1751.2.18.6.33.1.2.0 = 153,
1.3.6.1.4.1.1751.2.18.6.33.1.3.0 = 45:86:20:02:00:88:01:00:0f:00:00:00:00:00:00:06:00:90:01:77,
1.3.6.1.4.1.1751.2.18.6.33.1.4.0 = 301001,
1.3.6.1.4.1.1751.2.18.6.33.1.5.0 = 0,
1.3.6.1.4.1.1751.2.18.6.33.1.6.0 = 669,
1.3.6.1.4.1.1751.2.18.1.146.1.1.0 = 100286
翻譯后:
Notification that a SPVC connection between ATM and ATM endpoints has been deleted. spvcAddrIfA= 1309001,
atmAtmSpvcVccVpiA= 14,
atmAtmSpvcVccVciA= 153,
atmAtmSpvcVccRemoteAtmPortAddr= 45:86:20:02:00:88:01:00:0f:00:00:00:00:00:00:06:00:90:01:77,
atmAtmSpvcVccIfB= 301001,
atmAtmSpvcVccVpiB= 0,
atmAtmSpvcVccVciB= 669,
(這個(gè)atmAtmSpvcVccRemoteAtmPortAddr應(yīng)該能轉(zhuǎn)成一個(gè)IP或Interface,暫時(shí)沒搞明白)
很明顯,可以明白是一條ATM2ATM的SPVC被刪除。
舉例2:
Trap原包內(nèi)容:
oid=1.3.6.1.4.1.1751.2.18.8.3
specifics=104
message=
1.3.6.1.4.1.1751.2.18.15.2.0 = 1309001,
1.3.6.1.4.1.1751.2.18.15.4.0 = 67,
1.3.6.1.4.1.1751.2.18.1.146.1.1.0 = 100374,
翻譯后:
Notification that a interface has undergone reduction in bandwidth. Critical depending on Failure Reason Code.interfaceIndex= 1309001,interfaceFailureReasonCode= 67[newBWBelowCurrentAllocated]
可以看明白,是一個(gè)通道的帶寬被改小了。
最后,用mibble把a(bǔ)cmib所有代碼和它相應(yīng)的描述導(dǎo)入數(shù)據(jù)庫(kù)。

/** *//**
* 導(dǎo)入acmib中所有類型代碼與描述的對(duì)映
*/

public void importCode()
{
MibBrowser mb = new MibBrowser();
Mib mib = mb.getMib("e:/ACMIB.mib");
List mvss = (List)mib.getAllSymbols();
Connection conn = ConnectionManager.getConnection();
int id = 1;

try
{
Statement stat = conn.createStatement();

for(int i=0,n=mvss.size();i<n;i++)
{
if(mvss.get(i) instanceof MibValueSymbol

&& ((MibValueSymbol)mvss.get(i)).getType() instanceof SnmpObjectType)
{
MibValueSymbol mvs = (MibValueSymbol)mvss.get(i);
SnmpObjectType soType = (SnmpObjectType)mvs.getType();

if(soType.getSyntax() instanceof IntegerType)
{
IntegerType intType = (IntegerType)soType.getSyntax();
MibValueSymbol[] itss = intType.getAllSymbols();
if(itss.length > 0)

for(int j=0;j < itss.length;j++)
{
stat.addBatch("insert into acmib_code(id,symbol,code,description)values("
+ id + ",'" + mvs.getName() + "'," + itss[j].getValue() + ",'" + itss[j].getName() + "')");
id++;
}
}
}
if( id % 100 == 0)
stat.executeBatch();
}
stat.executeBatch();

}catch(Exception e)
{
e.printStackTrace();
}
}
結(jié)果如下:

這樣,為翻譯psax trap的所有的基礎(chǔ)數(shù)據(jù)都準(zhǔn)備好了。
接著,用mibble把acmib中所有事件導(dǎo)入數(shù)據(jù)庫(kù):

/** *//**
* 導(dǎo)入事件
*/

public void importEvent()
{
MibBrowser mb = new MibBrowser();
Mib mib = mb.getMib("e:/ACMIB.mib");
List mvss = (List)mib.getAllSymbols();
Connection conn = ConnectionManager.getConnection();
int id = 1;

try
{
Statement stat = conn.createStatement();

for(int i=0,n=mvss.size();i<n;i++)
{
if(mvss.get(i) instanceof MibValueSymbol

&& ((MibValueSymbol)mvss.get(i)).getType() instanceof SnmpNotificationType)
{
MibValueSymbol mvs = (MibValueSymbol)mvss.get(i);
SnmpNotificationType snt = (SnmpNotificationType)mvs.getType();
String descr = null;
String originDescr = null;
if(snt.getDescription().indexOf(":") > 0)
descr = snt.getDescription().substring(snt.getDescription().indexOf(":") + 2);
else
descr = snt.getDescription();
if(descr.indexOf("Return value") > 0)
descr = descr.substring(0,descr.indexOf("Return value"));
if(descr.indexOf("Data send with the trap") > 0)
descr = descr.substring(0,descr.indexOf("Data send with the trap"));
descr = descr.replaceAll("\n", " ");
descr = descr.replaceAll("'", "''");
originDescr = snt.getDescription().replaceAll("'", "''");
stat.addBatch("insert into acmib_event(id,symbol,description,origin_description)values(" + id + ",'" + mvs.getName() + "','" + descr + "','" + originDescr + "')");
id++;
if( id % 100 == 0)
stat.executeBatch();
}
}
stat.executeBatch();

}catch(Exception e)
{
e.printStackTrace();
}
}
結(jié)果如下:
今天終于實(shí)現(xiàn)把朗訊PSAX ATM交換機(jī)的SNMP Trap翻譯成明文的功能。前后花了四天的時(shí)間。
開始,我想用mibble把a(bǔ)cmib完全解析出來(lái),但折騰了一整天,都沒有結(jié)果,至少最重要的OID是終始出不來(lái),可能是我不會(huì)用mibble吧。
接著換種思路,用SolarWinds(一個(gè)很好用的mib browser)把a(bǔ)cmib copy成純文本。
文本如下:
acMIB 1.3.6.1.4.1.1751.2.18
connectionConfig 1.3.6.1.4.1.1751.2.18.6
atmAtmSpvcVccTable 1.3.6.1.4.1.1751.2.18.6.33
atmAtmSpvcVccEntry 1.3.6.1.4.1.1751.2.18.6.33.1
atmAtmSpvcVccStatsInOdometerCellCountHiB 1.3.6.1.4.1.1751.2.18.6.33.1.50
atmAtmSpvcVccStatsInOdometerCellCountLoA 1.3.6.1.4.1.1751.2.18.6.33.1.47
atmAtmSpvcVccStatsInOdometerCellCountLoB 1.3.6.1.4.1.1751.2.18.6.33.1.51
atmAtmSpvcVccStatsOdometerReset 1.3.6.1.4.1.1751.2.18.6.33.1.55
atmAtmSpvcVccStatsOdometerTimer 1.3.6.1.4.1.1751.2.18.6.33.1.54
atmAtmSpvcVccStatsOutCellCountHiA1.3.6.1.4.1.1751.2.18.6.33.1.37
atmAtmSpvcVccStatsOutCellCountHiB1.3.6.1.4.1.1751.2.18.6.33.1.41
atmAtmSpvcVccStatsOutCellCountLoA 1.3.6.1.4.1.1751.2.18.6.33.1.38
atmAtmSpvcVccStatsOutCellCountLoB 1.3.6.1.4.1.1751.2.18.6.33.1.42
atmAtmSpvcVccStatsOutOdometerCellCountHiA1.3.6.1.4.1.1751.2.18.6.33.1.48
atmAtmSpvcVccStatsOutOdometerCellCountHiB1.3.6.1.4.1.1751.2.18.6.33.1.52
atmAtmSpvcVccStatsOutOdometerCellCountLoA 1.3.6.1.4.1.1751.2.18.6.33.1.49
atmAtmSpvcVccStatsOutOdometerCellCountLoB 1.3.6.1.4.1.1751.2.18.6.33.1.53
atmAtmSpvcVccStatsTimer 1.3.6.1.4.1.1751.2.18.6.33.1.43
atmAtmSpvcVccSusCellRateA2B 1.3.6.1.4.1.1751.2.18.6.33.1.10
atmAtmSpvcVccSusCellRateB2A 1.3.6.1.4.1.1751.2.18.6.33.1.16
atmAtmSpvcVccTfcDescModify 1.3.6.1.4.1.1751.2.18.6.33.1.70
atmAtmSpvcVccTrafficShapingA2B 1.3.6.1.4.1.1751.2.18.6.33.1.64
atmAtmSpvcVccTrafficShapingB2A 1.3.6.1.4.1.1751.2.18.6.33.1.65
atmAtmSpvcVccType 1.3.6.1.4.1.1751.2.18.6.33.1.20
atmAtmSpvcVccVciA 1.3.6.1.4.1.1751.2.18.6.33.1.2
atmAtmSpvcVccVciB 1.3.6.1.4.1.1751.2.18.6.33.1.6
atmAtmSpvcVccViA 1.3.6.1.4.1.1751.2.18.6.33.1.56
……
把這個(gè)文本導(dǎo)入數(shù)據(jù)庫(kù):

/** *//**
* acmib.mib有兩個(gè)版本,此方法把兩個(gè)版本中數(shù)據(jù)都導(dǎo)入數(shù)據(jù)庫(kù).
* 但保證不會(huì)有重復(fù)的oid
*/

public void importOid()
{
Connection conn = ConnectionManager.getConnection();

try
{
Statement stat = conn.createStatement();
BufferedReader in1 = new BufferedReader(new FileReader("e:/acmib.txt"));
String row = null;
int id = 1;

while((row=in1.readLine())!=null)
{
int loc = row.indexOf("1.3.6.");
String symbol = row.substring(0, loc - 1).trim();
String oid = row.substring(loc).trim();
stat.addBatch("insert into acmib_oid(id,oid,symbol)values(" + id + ",'" + oid + "','" + symbol + "')");
id++;
if( id % 100 == 0)
stat.executeBatch();
}
stat.executeBatch();
ResultSet rs = stat.executeQuery("select oid from acmib_oid order by oid");
List<String> oids = new ArrayList<String>();
while(rs.next())
oids.add(rs.getString(1));
BufferedReader in2 = new BufferedReader(new FileReader("e:/acmib2.txt"));

while((row=in2.readLine())!=null)
{
String[] rowCols = row.split(" ");
if(oids.contains(rowCols[2])) continue;

stat.addBatch("insert into acmib_oid(id,oid,symbol)values(" + id + ",'" + rowCols[2] + "','" + rowCols[1] + "')");
id++;
if( id % 100 == 0)
stat.executeBatch();
}
stat.executeBatch();

}catch(Exception e)
{
e.printStackTrace();
}
}
結(jié)果如下:

2009年10月 江西之行:
廬山--九江--南昌
到目前為止,我走過(guò)的地方:
吉林:長(zhǎng)春
遼寧:沈陽(yáng)
河北:秦皇島、衡水
北京
山東:濟(jì)南、淄博、濰坊、泰安
安徽:淮北
江蘇:徐州
重慶
陜西:安康
江西:南昌、九江
福建:福州、廈門、泉州、漳州、龍巖、南平、三明
廣東:廣州、佛山、中山、韶關(guān)、惠州、云浮、河源、陽(yáng)江、潮州、茂名
在rfc1213.mib,接口組中:
if InOctets --接口發(fā)送的字節(jié)數(shù)
ifOutOctets --接口接收到的字節(jié)數(shù)
if InUcastPkts --輸入的單播包數(shù)
ifOutUcastPkts --輸出的單播包數(shù)
if InNUcastPkts --輸入的非單播包數(shù)
ifOutNUcastPkts --輸出的非單播包數(shù)
if InDiscards --接口丟棄的輸入包數(shù)
ifOutDiscards --接口丟棄的輸出包數(shù)
if InErrors --包含錯(cuò)誤的輸入包數(shù)
ifOutErrors --包含錯(cuò)誤的輸出包數(shù)
ifinUnkownProtos --由于定向到一個(gè)未知或
不支持的協(xié)議而被丟棄的包數(shù)
ifOutQlen --輸出隊(duì)列中的所有包數(shù)
portName --端口的名稱
性能管理應(yīng)用一般要觀察接口的利用率、錯(cuò)誤
率、丟包率等。這些性能參數(shù)都分為輸入和輸出兩
種情況。下面給出計(jì)算公式:
輸入利用率= (Δif InOctets * 8) / (ifSpeed * T) * 100 %
輸出利用率= (ΔifOutOctets * 8) / (ifSpeed * T) * 100 %
輸入差錯(cuò)率= Δif InErrors/ (Δif InUcastPks + Δif InNucastPks) * 100 %
輸出差錯(cuò)率= ΔifOutErrors/ (ΔifOutUcastPks + ΔifOutNucastPks) * 100 %
輸入丟包率=Δif InDiscards/ T
輸出丟包率=ΔifOutDiscards/ T