今天看了篇帖子是關於如何利用zabbix 自帶的key去讀log,監控linux異常登錄,一直以來都是本身寫腳本去讀log的.就想看看這個zabbix log 這個key怎麼樣..
好吧開始:linux
官方文檔: 英語好的去看吧 web
首先: log(logrt) key 只支持 active 模式....ssh
那麼編碼
1.啓動active 模式的agentspa
sed -i s/^ServerActive=.*/ServerActive=192.168.1.17/ /etc/zabbix/zabbix_agentd.conf sed -i s/^Hostname=.*/Hostname=log_test/ /etc/zabbix/zabbix_agentd.conf sed -i /StartAgents=3/aStartAgents=0 /etc/zabbix/zabbix_agentd.conf
修改 配置中的IP爲本身的IP
修改 Hostname爲本身的name日誌
2.添加host
Hostname 是上邊的hostname
IP是0.0.0.0 端口不要改
其餘的隨意,根據我的需求code
過了20分鐘Availability圖標都沒亮,作了個zabbix Agent 的active 模式的template 加了進去仍是不亮,
最後搞了個Template OS Linux Active ..Availability圖標亮了, 把link Template 取消了還亮着..
(應該是有數據獲取到了纔會亮.亮了不出問題是不會暗....)
好吧咱們繼續..
咱們來顯示登錄異常的提醒:regexp
3. Linux 登錄異常的log文件在: /var/log/secureorm
Sep 22 03:38:57 web2 sshd[1587]: Accepted publickey for root from 192.168.1.156 port 52626 ssh2 Sep 22 05:15:55 web2 sshd[1878]: Failed password for root from 192.168.1.17 port 49665 ssh2
#這是secure的一段,登錄成功和失敗的.server
4. log key的格式
log[/path/to/file/file_name,<regexp>,<encoding>,<maxlines>,<mode>,<output>] or logrt[/path/to/file/regexp_describing_filename_pattern,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
上邊是官方文檔的解釋:很詳細...也有樣例...
第一部分:/path/to/file/file_name log文件的路徑 第二部分: <regexp> 正則匹配 第三部分: <encoding> 文件的編碼格式 第四部分: <maxlines> agent每秒發送給server的最大行數 第五部分: <mode> 模式 第六部分: <output> 可選的輸出格式
Zabbix agent will filter entries of the log file by the content regexp, if present.
Make sure that the file has read permissions for the 'zabbix' user otherwise the item status will be set to 'unsupported'.
For more details see log and logrt entries in the supported Zabbix agent item keys section.
再看看官檔的解釋: 若是 regexp 部分存在的話,zabbix agent會去使用regexp去過濾日誌文件的內容
確保zabbix對日誌有可讀權限
5. 建立item
name 隨便起個
type 要選擇 zabbix agent(active)
key 咱們點擊 select選擇log[......] file 改爲咱們的日誌文件/var/log/secure
Type of Information 選擇log
其餘的隨意了
如圖:
看看item 沒報錯就正常了,這裏應該會報錯,缺乏對log文件的讀權限
實驗我只是作了簡單的賦權:
chown zabbix.zabbix /var/log/secure
好了沒什麼問題了!
6. 建立個trigger
name 隨便寫個
Expression:
{log_test:log[/var/log/secure,"Failed password"].str(Failed)}=1 and {log_test:log[/var/log/secure,"Failed password"].nodata(60)}=0
# item 獲取的值中出現Failed 就報警, 若是60s 無數據就恢復.
Severitey 選擇 Warning
好了一切都完成了....
模擬個失敗登錄試試.....
這是獲取的數據...
郵件也收到了報警..(前提是你要配置了郵件..)
完成了...
好了這個只是簡單的模擬了log的用法..咱們匹配了Failed 咱們也能夠配置 key( log[/var/log/secure,"(Accepted|Failed) password"]) trigger相應改下.根據不一樣的需求能夠作響應的改變.output能夠改變輸出的結果 像第六步那張表, 輸出的都是截取到的內容,你能夠讓輸出0,1 任何這樣就能夠作一些其餘的用途了.有人問這個東西讀日誌的效率,沒找到讀日誌具體的描述,我以爲效率不會過低,應該和tail -f 一個原理...對於不會寫腳本去分析日誌來講這個已經很簡單了...