使用 snmp 監控檔案
使用snmp監控檔案大小, 以及檔案中出現指定字樣的次數
snmp提供兩個entry來達到目標, 使用此方法可以來監控比如nginx access log裡面502的次數, 又或者是 error log的大小.
監控檔案大小, 單位為kb: file FILE [MAXSIZE]
監控指定字樣出現次數: logmatch NAME FILE CYCLETIME REGEX
在/etc/snmp/snmpd.conf
新增以下兩行
logmatch mylogcheck /var/log/dummy/dummy.log 150 SYSTEM STATS
file /var/log/dummy/dummy.log 2
這樣的意思就是說
- 監控
/var/log/dummy/dummy.log
這個檔案 SYSTEM STATS出現的次數 /var/log/dummy/dummy.log
這個檔案的大小不能超過2kmylogcheck
只是名子, 可以自己取
先看一下狀態, 目前SYSTEM STAT出現三次, 並且檔案大小是8.3k
root@ubuntu:/var/log/dummy# grep "SYSTEM STAT" dummy.log | wc -l
3
root@ubuntu:/var/log/dummy# du -h dummy.log
8.3K dummy.log
查看出現次數
❯ snmpwalk -v2c -c labsnmp 192.168.41.123 .1.3.6.1.4.1.2021.16
UCD-SNMP-MIB::logMatchMaxEntries.0 = INTEGER: 250
UCD-SNMP-MIB::logMatchIndex.1 = INTEGER: 1
UCD-SNMP-MIB::logMatchName.1 = STRING: mylogcheck
UCD-SNMP-MIB::logMatchFilename.1 = STRING: /var/log/dummy/dummy.log
UCD-SNMP-MIB::logMatchRegEx.1 = STRING: SYSTEM STATS
UCD-SNMP-MIB::logMatchGlobalCounter.1 = Counter32: 8
UCD-SNMP-MIB::logMatchGlobalCount.1 = INTEGER: 8
UCD-SNMP-MIB::logMatchCurrentCounter.1 = Counter32: 3
UCD-SNMP-MIB::logMatchCurrentCount.1 = INTEGER: 3
UCD-SNMP-MIB::logMatchCounter.1 = Counter32: 3
UCD-SNMP-MIB::logMatchCount.1 = INTEGER: 0
UCD-SNMP-MIB::logMatchCycle.1 = INTEGER: 150
UCD-SNMP-MIB::logMatchErrorFlag.1 = INTEGER: noError(0)
UCD-SNMP-MIB::logMatchRegExCompilation.1 = STRING: Success
抓到該字詞出現3次
查看檔案大小
❯ snmpwalk -v2c -c labsnmp 192.168.41.123 .1.3.6.1.4.1.2021.15.1
UCD-SNMP-MIB::fileIndex.1 = INTEGER: 1
UCD-SNMP-MIB::fileName.1 = STRING: /var/log/dummy/dummy.log
UCD-SNMP-MIB::fileSize.1 = INTEGER: 8 kB
UCD-SNMP-MIB::fileMax.1 = INTEGER: 2 kB
UCD-SNMP-MIB::fileErrorFlag.1 = INTEGER: error(1)
UCD-SNMP-MIB::fileErrorMsg.1 = STRING: /var/log/dummy/dummy.log: size exceeds 2kb (= 8kb)
抓到檔案大小8k, 超過我們配置的2k
那個 oid 是哪來的?
其實我沒有找到oid.. Orz
那我是怎麼知道要使用這個oid呢? 是用下面這種偷吃步的方式啦!
因為snmpd已經註冊了我們配置的名子, 所以就大範圍搜尋!
❯ snmpwalk -v2c -c labsnmp 192.168.41.123 .1.3.6.1.4.1.2021 | grep mylogcheck
UCD-SNMP-MIB::logMatchName.1 = STRING: mylogcheck
找到以後,再把他翻譯回來
❯ snmptranslate -On UCD-SNMP-MIB::logMatchName.1
.1.3.6.1.4.1.2021.16.2.1.2.1
其實不用特別翻譯也可以用哦, 前提是你的snmp client有安裝mib; 我覺得反解回來oid比較通用啦~
額外技巧: snmp正反解
正解
% snmptranslate .1.3.6.1.2.1.1.3.0
SNMPv2-MIB::sysUpTime.0
反解
% snmptranslate -On SNMPv2-MIB::sysUpTime.0
.1.3.6.1.2.1.1.3.0